为了账号安全,请及时绑定邮箱和手机立即绑定

更新“默认字典”中的值而不删除其键

更新“默认字典”中的值而不删除其键

一只甜甜圈 2021-09-11 16:27:38
我有两个字典,第一个是第二个的默认值,如果它们不存在或未定义,应该回退到什么,它有点像这样: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 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

用:


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


查看完整回答
反对 回复 2021-09-11
?
UYOU

TA贡献1878条经验 获得超4个赞

如果你的字典结构总是像上面那样,那么下面的代码可以正常工作:


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]})

祝你好运


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信