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

时间:2019-09-23 16:09:13

标签: 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",{} } 

我希望能够添加新键并增加现有键的值,所以我尝试了以下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'

我该如何解决错误?实现向现有键添加新值的最佳方法是什么?

3 个答案:

答案 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_1dictionary_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