我正在尝试创建一个Python字典,该字典具有一个键集合,每个键具有多个值。我希望能够将值添加到字典中的现有键。我已经对此进行了审查,但是没有找到直接适用的话题。
这是密钥的格式
{ "key1":{"value1-1 Attr": "value1-1","value1-2 Attr": "value1-2","value1-3 Attr": "value1-3", "Key2":{"value2-1 Attr": "value2-1","value2-2 Attr": "value2-2","value2-3 Attr": "value2-3",{} }
我希望能够添加新键并增加现有键的值,所以我尝试了以下Python代码:
message1 = {"value1-4 Attr": "value1-4","value1-5 Attr": "value1-6","value1-7 Attr": "value1-7"}
if key in dictionary:
dictionary[key].append(message1)
else:
dictionary[key] =message1
计划是稍后将字典写入json文件。问题是我不断收到此错误,但不确定如何解决:
'dict'对象没有属性'append'
我该如何解决错误?实现向现有键添加新值的最佳方法是什么?
答案 0 :(得分:1)
您应该使用列表来存储这些值。没有理由在这里嵌套字典。尤其是因为您仅在此处使用附加。
您的数据将如下所示:
data = {
"key1":["value1-1", "value1-2","value1-3"],
"Key2":["value2-1","value2-2", "value2-3"]}
那么您将不需要if语句,只需使用dict.setdefault
data.setdefault(key, []).append(message)
答案 1 :(得分:1)
TL; DR:您可以将append
的值key: value
保留到Python列表(或数组)中,而不能保留给字典。
dictionary[key] = message1
对添加到字典如果键已经在字典中,则语法dictionary[key]
会将message
的现有值更改为key: message1
,如果键已经存在,则创建键值对if key in dictionary:
dictionary[key].append(message1)
else:
dictionary[key] = message1
还没有在字典中。
所以代替这个...
dictionary[key] = message1
...您将使用此:
key: value
dictionary_1.update(dictionary_2)
对更新字典如果要使用其他词典中的值更新词典,可以通过以下方式进行:
dictionary_1
这会使用dictionary_2
中每个键的值在适当位置修改dictionary_1
。
如果某个密钥在dictionary_2
中不存在,但在update
中存在,则dictionary_1
将基于dictionary_2
修改dictionary_1
,这样{{ 1}}包含键值对key: dictionary_2[key]
。
或者,如果dictionary_1
和dictionary_2
中都存在密钥,那么update
将用dictionary_1[key]
中的值覆盖dictionary_2[key]
中的现有值。
所以代替这个...
if key in dictionary:
dictionary[key].append(message1)
else:
dictionary[key] = message1
...您将使用此:
dictionary[key].update(message1)
这仅在dictionary[key]
的值是字典时有效。
如果您希望键具有多个值,则可以将多个值存储在列表中:
dictionary = {key: [value_1, value_2, value_3]}
然后,您可以在列表中附加另一个值:
dictionary[key].append(value_4)
结果:
dictionary = {key: [value_1, value_2, value_3, value_4]}
所以代替这个...
if key in dictionary:
dictionary[key].append(message1)
else:
dictionary[key] = message1
...您将使用此:
if key in dictionary:
dictionary[key].append(message1)
else:
dictionary[key] = [message1]
如果key
中已经存在dictionary
,则将message
附加到dictionary[key]
。否则,它将创建一个新的单项列表[message1]
作为dictionary[key]
的值。
但是,dictionary[key].append(message1)
仅在dictionary[key]
的值是列表的情况下有效,而不是的情况是在字典中的情况。
答案 2 :(得分:0)
if key in dictionary:
dictionary[key] = dictionary[key] + message1
print(dictionary[key])
else:
dictionary[key] = message1