循环进入字典列表

时间:2019-06-30 00:44:47

标签: python list dictionary

我有一个字典列表,这是一本书的列表,它来自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 :(得分:0)

第一个是范围错误。您正在尝试使用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)