如何更新嵌套字典中键的值?

Posted

技术标签:

【中文标题】如何更新嵌套字典中键的值?【英文标题】:How to update value of key in nested dictionary? 【发布时间】:2019-07-15 22:18:59 【问题描述】:
items = ['id': 1, 'language': 'English', 'name': 'Sarah', 'description': 'Blah blah', 'id': 2, 'language': 'English', 'name': 'Jessica', 'description': 'More blah']

d = 
for item in items:

    language = item['language']
    id = item['id']
    name = item['name']
    description = item['description']

    d[language][id] = 'name': name, 'description': description

print(d)

我希望在输出中看到:

'English': 1:'name': 'Sarah', 'description': 'Blah blah', 2:'name': 'Jessica', 'description': 'More blah'

但不幸的是,我遇到了 KeyError:

那么,问题是如何在嵌套字典中更新/附加值?我做错了什么?

【问题讨论】:

它可能是重复的。好吧,很多类似的问题,但很难找到一个确切的问题,所以就让它保持开放 【参考方案1】:

d 最初是一个空字典,因此当您尝试将值分配给 d[language][id] 时,还没有关键语言(即“英语”)。

您可以按如下方式更改代码:

for item in items:

    language = item['language']
    id = item['id']
    name = item['name']
    description = item['description']

    if not language in d:
        d[language] = 
    d[language][id] = 'name': name, 'description': description

【讨论】:

非常感谢您提供的解决方案!【参考方案2】:

´d´ 不包含您尝试使用 d[language][id] = 'name': name, 'description': description 创建的 d["English"] - 因此出现错误。


如果它们不存在,您不能“即时”创建中间字典 - 要么检查它们是否已经存在,如果不创建它们 - 或者使用 dict.setdefault(key,default) 创建条目(如果它尚不存在):

items = ['id': 1, 'language': 'English', 'name': 'Sarah', 'description': 'Blah blah',
         'id': 2, 'language': 'English', 'name': 'Jessica', 'description': 'More blah']

d = 
for item in items:

    language = item['language']
    idd = item['id']
    name = item['name']
    description = item['description']

    d.setdefault(language,)[idd] = 'name': name, 'description': description

print(d)

输出:

'English': 1: 'name': 'Sarah', 'description': 'Blah blah', 
             2: 'name': 'Jessica', 'description': 'More blah'

如果您使用setdefault 遇到性能问题,您也可以使用collections.defaultdict - 速度稍慢。


相关:Use cases for the 'setdefault' dict method

【讨论】:

亲爱的帕特里克。我认为这是我见过的最好的答案之一。你对你所做的事情充满了灵感和热情。太感谢了!衷心祝愿您一切顺利!

以上是关于如何更新嵌套字典中键的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何展平Python字典中键的值(元组列表列表)?

如何将数组中键的值添加到字典中? [关闭]

如何在嵌套字典中查找所有出现的键,同时跟踪外部字典键值?

在嵌套字典中查找特定键的值

swift 3通过字典中键的字符串值过滤字典数组

更改字典中键的名称