如何更新嵌套字典中键的值?
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
【讨论】:
亲爱的帕特里克。我认为这是我见过的最好的答案之一。你对你所做的事情充满了灵感和热情。太感谢了!衷心祝愿您一切顺利!以上是关于如何更新嵌套字典中键的值?的主要内容,如果未能解决你的问题,请参考以下文章