将数据附加到 Python 中的列表字典时出现键错误

问题描述

我正在尝试创建一个字典,其中键值存储在这样的列表中:

data={
    "key_value":["h1","h2","h3"],"key_value2":["h11","h21","h31"],}

在向这个字典列表中添加元素时,我正在使用这个函数

data[book_name].append(highlight)

但这给了我一个关键错误 KeyError: 'Key_value ' 为什么会发生这种情况?

解决方法

就问题而言,可以使用 data.setdefault(book_name,[]).append(highlight)。如果键不存在,它将创建一个新键,并使用一个空列表作为值,否则您将获得可以附加到的现有键的列表。

注意:如果您的键带有尾随空格,这可能会导致“意外”行为。例如:data[' key']data['key ']。您可以使用诸如 data.setdefault(book_name.strip(),[]).append(highlight) 之类的东西来解决这个问题。

推荐阅读:collections.defaultdict

,

发生错误是因为您在 data['key_value '] 中放置了一个空格。应该是这样的:data['key_value']

当您尝试访问字典的任何键时,请确保该键与您的字典中的键相同。

例如,您的字典是:

data={
    'key1': ['val1','val2']
}

如果您尝试访问字典的键,它应该是 data['key1'],而不是 data[' key1']data['key1 ']data[' key1 ']

,

这是因为您的字典中没有名为 book_list 的键。您可以将现有键的 value_list 附加到 value_list,例如您的“key_value2”,如下所示:

data={"key_value":["h1","h2","h3"],"key_value2":["h11","h21","h31"]}
data["key_value2"].append("highlight")
print(data)
#prints: {'key_value': ['h1','h2','h3'],'key_value2': ['h11','h21','h31','highlight']}

如果您想在字典中创建一个全新的 key_value 对,然后将更多值附加到值列表中,您可以这样做:

#create a new key,the value for which is a list:
data["book_names"] = ["highlight"]

#append another value to the value list for existing key:
data['book_names'].append("lowlights")

#Output:
#data after first operation: {'key_value': ['h1','h31'],'book_names': ['highlight']}
#data after second operation: {'key_value': ['h1','book_names': ['highlight','lowlights']}