我想在不更改现有内容的情况下更新或创建嵌套字典。
在下面的示例中,我将尝试将嵌套为孩子的一对{'key2.2': 'value2.2'}
添加到条目key2中。
mydict = {'key1': 'value1', 'key2': {'key2.1': 'value2.1'}}
mydict['key2'].update({'key2.2': 'value2.2'})
pprint(mydict)
{'key1': 'value1', 'key2': {'key2.1': 'value2.1', 'key2.2': 'value2.2'}}
这是我所期望的,在这里没问题。
mydict = {'key1': 'value1'}
mydict['key2'].update({'key2.2': 'value2.2'})
KeyError: 'key2'
似乎是逻辑,所以让我们尝试其他方法。
mydict = {'key1': 'value1'}
mydict.update({'key2': {'key2.2': 'value2.2'}})
pprint(mydict)
{'key1': 'value1', 'key2': {'key2.2': 'value2.2'}}
完美! 让我们检查一下情况1是否也适用。
mydict = {'key1': 'value1', 'key2': {'key2.1': 'value2.1'}}
mydict.update({'key2': {'key2.2': 'value2.2'}})
pprint(mydict)
{'key1': 'value1', 'key2': {'key2.2': 'value2.2'}}
现有条目{'key2.1': 'value2.1'}
被删除了,这不是我想要的。
实现我想要的最好方法是什么?像嵌套更新一样? 我知道这可以通过几次try:/ KeyError:除外来实现,但是看起来不是很干净。
答案 0 :(得分:3)
您可以使用defaultdict:
from collections import defaultdict
mydict = defaultdict(dict)
mydict.update({'key1': 'value1', 'key2': {'key2.1': 'value2.1'}})
mydict['key2'].update({'key2.2': 'value2.2'})
print(mydict)
mydict = defaultdict(dict)
mydict.update({'key1': 'value1'})
mydict['key2'].update({'key2.2': 'value2.2'})
print(mydict)
输出:
defaultdict(<class 'dict'>, {'key1': 'value1', 'key2': {'key2.1': 'value2.1', 'key2.2': 'value2.2'}})
defaultdict(<class 'dict'>, {'key1': 'value1', 'key2': {'key2.2': 'value2.2'}})
答案 1 :(得分:0)
尝试:
mydict = {'key1': 'value1', 'key2': {'key2.1': 'value2.1'}}
if "key2" in mydict:
mydict["key2"].update({'key2.2': 'value2.2'})
else:
mydict["key2"] = {'key2.2': 'value2.2'}
答案 2 :(得分:0)
代码:
mydict = {'key1': 'value1', 'key2': {'key2.1': 'value2.1'}}
mydict['key2.2'.split('.')[0]].update({'key2.2' : 'value2.2'})
print(mydict)
输出:
{'key2': {'key2.2': 'value2.2', 'key2.1': 'value2.1'}, 'key1': 'value1'}