Цикл в списке словаря - PullRequest
0 голосов
/ 30 июня 2019

У меня есть список словарей, это список книг, он пришел из файла JSON.У меня есть другой словарь, это пустое слово и число.Если название книги начинается с, я хочу добавить новый ключ в словарь, и значением этого ключа будет число.У меня есть путь.

Этот дает мне: name 'j' is not defined

import json

with open('book.json', 'r') as f:
    books_dict = json.load(f)

empty_word = {
    'The ' : '4',
    'An ' : '3',
}

for book in books_dict:
    if any(book["Title"].startswith(k,0) for k, j in empty_word.items()):
        book['number'] = j
        books_list.append(book)

Этот другой просто ничего не делает, я должен прервать, и, похоже, в этой строке проблема:

import json

with open('book.json', 'r') as f:
    books_dict = json.load(f)

empty_word = {
    'The ' : '4',
    'An ' : '3',
}

for book in books_dict:
    for i, k in empty_word.items():
        if book["Title"].startswith(i,0):
            book['number'] = k
            books_dict.append(book)

Я нуб и явно что-то упускаю.Впервые здесь, если кто-то может направить меня!

1 Ответ

0 голосов
/ 30 июня 2019

Первым является ошибка области видимости.Вы пытаетесь использовать j, но j определяется только для вашего вызова функции any:

any(book["Title"].startswith(k,0) for k, j in empty_word.items())

Это можно решить, разбив это на несколько выражений:

for k, j in empty_word.items():
    if book["Title"].startswith(k,0):
        book['number'] = j
        books_list.append(book)

Во-вторых, вы добавляете к итерируемому , пока вы итерируете по нему .Это почти всегда плохо, но ваш случай выглядит как опечатка.Попробуйте изменить последнюю строку на books_list.append(book).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...