我想要创建一个通用的函数,用于合并Python中的n
个嵌套字典。
我已经创建了一个合并三个字典的函数,但我希望将其推广到n
个嵌套字典。
我创建的函数如下:
def mergedicts(dict1, dict2, dict3):
for k in set(dict1.keys()).union(dict2.keys()).union(dict3.keys()):
if k in dict1 and k in dict2 and k in dict3 :
if isinstance(dict1[k], dict) and isinstance(dict2[k], dict) and isinstance(dict3[k], dict):
yield (k, dict(mergedicts(dict1[k], dict2[k], dict3[k])))
else:
# If one of the values is not a dict, you can't continue merging it.
# Value from first and second dict are written in form of lists.
yield (k, [dict1[k],dict2[k], dict3[k]])
# Alternatively, replace this with exception raiser to alert you of value conflicts
elif k in dict1:
yield (k, dict1[k])
elif k in dict2:
yield(k,dict2[k])
else:
yield (k, dict3[k]
dict1 = {"canada":{'america':189,'asia':175,'europe': 186},
"norway":{'australia': 123,'africa':124,'brazil':125}}
dict2= {"canada":{'america':13,'asia':14,'europe': 15},
"norway":{'australia': 17,'africa':18,'brazil':19}}
dict3= {"canada":{'america':127,'asia':256,'europe': 16},
"norway":{'australia': 17,'africa':18,'brazil':19}}
# After running the above function I have got this output
{'canada': {'europe': [186, 15, 16], 'america': [189, 13, 127], 'asia': [175, 14, 256]}, 'norway': {'australia': [123, 17, 17], 'brazil': [125, 19, 19], 'africa': [124, 18, 18]}}
有没有一种通用的方法可以合并Python中的 n
个嵌套字典。 (例如,我可能想以类似于上述方式合并20个嵌套字典,但是我的方法只允许合并三个嵌套字典。)