我有以下两个命令,我想像下面这样将更新dict1
与dict2
的值组合在一起。添加不存在的新密钥,并更新值。
dict1
{'https://site1.com': {'React': None, 'Drupal': '5.1','python':None}}
dict2
{'https://site1.com': {'React': '6.0', 'Drupal': '5.3','PHP':'7'},'https://site2.com':{'Rails':'6.1'}}
到以下输出:
final_dict
{'https://site1.com': {'React': '6.0', 'Drupal': '5.3','PHP':'7','python':None},'https://site2.com':{'Rails':'6.1'}}
答案 0 :(得分:3)
您可以遍历dict2
的项目并使用相同键的值更新dict1
。使用dict.setdefault
方法使用dict初始化新密钥:
for k, v in dict2.items():
dict1.setdefault(k, {}).update(v)
使用示例输入,dict1
将变为:
{'https://site1.com': {'React': '6.0', 'Drupal': '5.3', 'python': None, 'PHP': '7'}, 'https://site2.com': {'Rails': '6.1'}}
答案 1 :(得分:2)
final_dict = {**dict1, **dict2}
(适用于Python 3.5 +)
答案 2 :(得分:1)
final_dict = dict1.update(dict2)
无效吗?
Resource
编辑:哇,实际上不是。卢卡的答案是正确的。
答案 3 :(得分:1)
迭代两个字典中的键,如果两个都有值,请选择较大的(据我所知),通过递归组合它们来支持子字典:
更新:对不起,我误会了,当两个值都有价值时,您想使用dict2的值。
def combine_dict(dict1, dict2):
final_dict = {}
# iterate keys in two dict
for k in dict1.keys() | dict2.keys():
v1 = dict1.get(k, None)
v2 = dict2.get(k, None)
if isinstance(v1, dict) or isinstance(v2, dict):
if not v1: v1 = {}
if not v2: v2 = {}
# combine recursively
final_dict[k] = combine_dict(v1, v2)
else:
final_dict[k] = v2
# if v1 and v2:
# final_dict[k] = max(v1, v2)
# else:
# final_dict[k] = v1 or v2
return final_dict
def test():
dict1 = {'https://site1.com': {'React': None, 'Drupal': '5.1', 'python': None}}
dict2 = {'https://site1.com': {'React': '6.0', 'Drupal': '5.3', 'PHP': '7'}, 'https://site2.com': {'Rails': '6.1'}}
final_dict = {'https://site1.com': {'React': '6.0', 'Drupal': '5.3', 'PHP': '7', 'python': None},
'https://site2.com': {'Rails': '6.1'}}
print(final_dict == combine_dict(dict1, dict2)) # output true
希望对您有所帮助,如有其他问题,请发表评论。 :)