【问题标题】:How to add new values to existing dictionary in python如何在python中向现有字典添加新值
【发布时间】:2019-09-23 16:09:13
【问题描述】:

我正在尝试创建一个 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'

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

【问题讨论】:

  • 您正确地为 else 块中现有字典中的键分配了一个值,因此您需要在上面的块中执行类似的操作。
  • 如果找到密钥,请尝试dictionary[key].update(message1)
  • 首先运行代码以确保您的语法正确:检查由缩进、未闭合括号等引起的错误。

标签: python dictionary


【解决方案1】:

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


key: value 对添加到字典中

如果键已经在字典中,语法dictionary[key] = message1dictionary[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_2的基础上修改dictionary_1,使得dictionary_1包含键值对key: dictionary_2[key] .

或者,如果一个键同时存在于dictionary_1dictionary_2 中,那么update 将用dictionary_2[key] 中的值覆盖dictionary_1[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】:

您应该使用列表来存储这些值。没有理由在这里嵌套字典。特别是因为你只是在这里使用 append。

您的数据将如下所示:

data = {
  "key1":["value1-1", "value1-2","value1-3"],
  "Key2":["value2-1","value2-2", "value2-3"]}

那么你将不需要 if 语句,只需使用 dict.setdefault

data.setdefault(key, []).append(message)

【讨论】:

    【解决方案3】:
    if key in dictionary:
        dictionary[key] = dictionary[key] + message1
        print(dictionary[key])
    else:
        dictionary[key] = message1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2010-11-04
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      相关资源
      最近更新 更多