从“默认字典”更新值,而无需删除其键

时间:2018-12-09 07:58:54

标签: python python-3.x

我有两个字典,第一个是如果不存在或未定义第二个的默认值,第二个的默认值应归于什么,

default_dict = {
    'lorem': {
        'foo': 'white',
        'bar': 'black',
    },
    'ipsum': {
        'xyz': '',
        'abc': {},
        'qwe': {}

    }
}

第二个看起来像这样:

custom_dict = {
    'lorem': {
        'bar': 'blue',
    },
    'ipsum': {
        'xyz': 'apple',
        'qwe': { 'one': 'strawberry' }

    }
}

是否可以通过default_dict的值从custom_dict“更新”?

所需的结果如下所示:

custom_dict = {
    'lorem': {
        'foo': 'white',
        'bar': 'blue',
    },
    'ipsum': {
        'xyz': 'apple',
        'abc': {},
        'qwe': { 'one': 'strawberry' }

    }
}

我尝试先进行default_dict.update(custom_dict),然后再进行custom_dict = default_dict,但是正如您可以想象的那样,我只是回到custom_dict了,所以default_dict的键在更新时被删除。

2 个答案:

答案 0 :(得分:3)

使用:

d={a:b for k,v in custom_dict.items() for a,b in v.items()}
print({k:{a:d.get(a,b) for a,b in v.items()} for k,v in default_dict.items()})

词典理解+嵌套词典理解将起作用。

输出:

{'lorem': {'foo': 'white', 'bar': 'blue'}, 'ipsum': {'xyz': 'apple', 'abc': {}, 'qwe': {'one': 'strawberry'}}}

答案 1 :(得分:1)

如果字典的结构始终与上面相同,则以下代码可以正常工作:

for item in default_dict:
    for value in default_dict[item].keys():
        if value not in custom_dict[item].keys():
            custom_dict[item].update({value: default_dict[item][value]})

祝你好运