Python 嵌套字典和嵌套更新



我想在不更改现有内容的情况下更新或创建嵌套词典。

在下面的示例中,我将尝试将嵌套为子级的这对{'key2.2': 'value2.2'}夫妇添加到 entry key2 中。

  • 情况 1:父键 (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'}}

这是我所期望的,这里没有问题。

  • 情况 2:父键 (key2(不存在:*
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。

  • 案例 1B:父键 (key2( 存在:
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'}被删除了,这不是我想要的。

实现我想要的东西的最佳方式是什么?像嵌套更新一样? 我知道这可以通过几次尝试:/除了KeyError:来实现,但它似乎不是很干净。

你可以使用 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'}})

尝试:

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'}

代码:

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'}

最新更新