Python嵌套字典和嵌套更新

时间:2020-05-12 12:22:25

标签: python

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

在下面的示例中,我将尝试将嵌套为孩子的一对{'key2.2': 'value2.2'}添加到条目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'}被删除了,这不是我想要的。

实现我想要的最好方法是什么?像嵌套更新一样? 我知道这可以通过几次try:/ KeyError:除外来实现,但是看起来不是很干净。

3 个答案:

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