Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将数据追加到列表的字典时出现键错误_Python_String_Dictionary_Keyerror - Fatal编程技术网

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

在Python中将数据追加到列表的字典时出现键错误,python,string,dictionary,keyerror,Python,String,Dictionary,Keyerror,我正在尝试创建一个字典,其中键值存储在如下列表中: data={ "key_value":["h1","h2","h3"], "key_value2":["h11","h21","h31"], } 在将元素添加到此DICT列表时,我使用此函数: data[book_name].append(highlight) 但这给

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

data={
    "key_value":["h1","h2","h3"],
    "key_value2":["h11","h21","h31"],
}
在将元素添加到此DICT列表时,我使用此函数:

data[book_name].append(highlight)
但这给了我一个键错误:'key\u value'
为什么会发生这种情况?

正如问题所示,
数据。可以使用setdefault(书名[])。append(突出显示)
。如果键不存在,它将创建一个新键,值为空列表,否则您将获得可附加到的现有键的列表

注意:如果您有尾随空格的键,这可能会导致“意外”行为。例如:
data['key']
vs
data['key']
。您可以使用类似于
data.setdefault(book\u name.strip(),[]).append(highlight)
的方法来解决这个问题


建议阅读:

发生错误是因为您在
数据['key\u value']
中放置了空格。它应该是这样的:
data['key\u value']

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

例如,你的字典是:

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

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

,因为您的字典中没有称为book\u list的键。您可以附加到现有键的值列表,如“键值2”,如下所示:

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']}
#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', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31'], 'book_names': ['highlight']}
#data after second operation: {'key_value': ['h1', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31'], 'book_names': ['highlight', 'lowlights']}
如果要在字典中创建一个全新的键值对,然后将更多值附加到值列表中,可以这样做:

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']}
#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', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31'], 'book_names': ['highlight']}
#data after second operation: {'key_value': ['h1', 'h2', 'h3'], 'key_value2': ['h11', 'h21', 'h31'], 'book_names': ['highlight', 'lowlights']}

看起来在
“Key\u value”的末尾有一个空格
。这是故意的吗?另外,您的示例有小写的
key\u value
。@JohnGordon yes编译器在字符串后面显示一个空格。就是intentional@JohnGordon没有实际的编译器消息是:keyrerror:“每周工作4小时”。@python\u用户:谢谢!我来自C++,这就是为什么我不知道你必须为密钥设置默认值。请不要通过破坏你的帖子来为别人做更多的工作。通过在Stack Exchange网络上发布,您已根据授予Stack Exchange分发该内容的不可撤销权利(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅: