我从配置文件中加载了两个字典,其格式如下:
{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'])}
答案 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']))}