我有两个字典,第一个是如果不存在或未定义第二个的默认值,第二个的默认值应归于什么,
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
的键在更新时被删除。
答案 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]})
祝你好运