合并两个具有相同键的字典

时间:2019-02-07 17:20:14

标签: python

我从配置文件中加载了两个字典,其格式如下: {key: (value, files_name)}

With files_name:我可以在其中找到此值的文件。

例如:

dict_1 = {'a': ({'b': ({'c': (1, ['file_1'])}, ['file_1'])}, ['file_1'])}
dict_2 = {'a': ({'b': ({'c': (2, ['file_2'])}, ['file_2'])}, ['file_2'])}

我想将它们合并在一起,并串联文件名列表。

因此,基本上,按照上面的示例,输出应为:

{'a': ({'b': ({'c': (1, ['file_1', 'file_2'])}, ['file_1', 'file_2'])}, ['file_1', 'file_2'])}

2 个答案:

答案 0 :(得分:1)

只要两个词典的结构和键相同,就可以使用递归进行任何复杂的词典。

def mergedict(dd1, dd2):
    dict_res = {}
    for key, val in dd1.items():
        if isinstance(val[0], dict):
            dict_res[key] = (mergedict(val[0], dd2[key][0]), val[1] + dd2[key][1])
        else:
            dict_res[key] = (val[0], val[1] + dd2[key][1])
    return dict_res

因此,如果您这样做:

rr = mergedict(dict_1, dict_2)
print(rr)

随着你的命令得到:

{'a': ({'b': ({'c': (1, ['file_1', 'file_2'])}, ['file_1', 'file_2'])}, ['file_1', 'file_2'])}

这是您的预期输出。

答案 1 :(得分:0)

我相信这很接近您要寻找的东西。尽管这是一个假设,但没有看到您的代码:

dict_1 = {'a': ({'b': ({'c': (1, ['file_1'])}, ['file_1'])}, ['file_1'])}
dict_2 = {'a': ({'b': ({'c': (2, ['file_2'])}, ['file_2'])}, ['file_2'])}

ds = [dict_1, dict_2]

d = {}

for k in dict_1.iterkeys():
    d[k] = tuple(d[k] for d in ds)

print d

>> {'a': (({'b': ({'c': (1, ['file_1'])}, ['file_1'])}, ['file_1']),
  ({'b': ({'c': (2, ['file_2'])}, ['file_2'])}, ['file_2']))}