如何在Python中向现有字典添加新值

e.i*_*luf 2 python dictionary

我正在尝试创建一个 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",{} } 
Run Code Online (Sandbox Code Playgroud)

我希望能够添加新密钥并增加现有密钥的值,因此我尝试了以下 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
Run Code Online (Sandbox Code Playgroud)

计划稍后将字典写入 json 文件。问题是我不断收到此错误,我不知道如何解决:

“dict”对象没有属性“append”

我该如何修复该错误以及向现有密钥添加新值的最佳方法是什么?

jkd*_*dev 5

TL;DR:您可以将append值分配给 Python 列表(或数组),但不能分配给字典。


将对添加key: value到字典中

如果键已在字典中,则语法dictionary[key] = message1将更改现有值dictionary[key]to ;如果键尚未在字典中,message则创建键值对。key: message1

所以而不是这个...

if key in dictionary:
    dictionary[key].append(message1)
else:
    dictionary[key] = message1
Run Code Online (Sandbox Code Playgroud)

...你会用这个:

dictionary[key] = message1
Run Code Online (Sandbox Code Playgroud)

key: value用不同的对更新字典

如果你想用另一个字典中的值更新一个字典,你可以这样做:

dictionary_1.update(dictionary_2)
Run Code Online (Sandbox Code Playgroud)

这会dictionary_1使用 中每个键的值进行就地修改dictionary_2

如果某个键不存在于 中dictionary_1,但存在于 中dictionary_2,则将基于update进行修改,以便 包含键值对。dictionary_1dictionary_2dictionary_1key: dictionary_2[key]

或者,如果 和 中都存在某个键dictionary_1dictionary_2则将用 中的值update覆盖现有值。dictionary_1[key]dictionary_2[key]

所以而不是这个...

if key in dictionary:
    dictionary[key].append(message1)
else:
    dictionary[key] = message1
Run Code Online (Sandbox Code Playgroud)

...你会用这个:

dictionary[key].update(message1)
Run Code Online (Sandbox Code Playgroud)

仅当 的值为dictionary[key]字典时才有效。


将值附加到字典中的列表

如果你想让一个键有多个值,你可以将多个值存储在一个列表中:

dictionary = {key: [value_1, value_2, value_3]}
Run Code Online (Sandbox Code Playgroud)

然后您可以将另一个值附加到列表中:

dictionary[key].append(value_4)
Run Code Online (Sandbox Code Playgroud)

结果:

dictionary = {key: [value_1, value_2, value_3, value_4]}
Run Code Online (Sandbox Code Playgroud)

所以而不是这个...

if key in dictionary:
    dictionary[key].append(message1)
else:
    dictionary[key] = message1
Run Code Online (Sandbox Code Playgroud)

...你会用这个:

if key in dictionary:
    dictionary[key].append(message1)
else:
    dictionary[key] = [message1]
Run Code Online (Sandbox Code Playgroud)

如果key已存在于 中dictionary,则将其追加message到 中dictionary[key]。否则,它会创建一个新的单项列表[message1]作为 的值dictionary[key]

但是,dictionary[key].append(message1)仅当 的值为dictionary[key]列表时才有效,而当值为字典时则无效。