合并字典中的字典元素列表

问题描述

我有以下复杂的结构,其中包含带有许多重复键的字典。我想合并以下结构并返回以下结构。尝试了多种方法,但无法破解。请帮忙。

输入结构:

{'lst_1': [{"127.0.0.1": [{“key1”:{“asm”: “entry1”,“CHG”: [“entry2”]}}]},{"127.0.0.1": [{“key1”: {“PL”: “entry3”,“DU”: “entry4”}}]},{"127.0.0.1": [{“key1”: {“SL”: “entry5”,“DU”: “entry6”}}]}],'lst_0': [{"127.0.0.1": [{“key2”: {“asm”: “entry7”,“CHG”: [“entry8”]}}]},{"127.0.0.1": [{“key2: {“PL”: “entry9”,“DU”: “entry10”}}]},{"127.0.0.1": [{“key2”: {“SL”: “entry11”,“DU”: “entry12”}}]}]}

输出结构:

{‘key1’: {‘asm’: ‘entry1’,'SL': ‘entry5’,'CHG’: [‘entry2’],'DU': ‘entry6’,'PL': ‘entry3’},‘key2’: {‘asm’: ‘entry7’,'SL': ‘entry11’,'CHG’: [‘entry8’],'DU': ‘entry12’,'PL': ‘entry9’}}

解决方法

这个就行了。

def filterDict(complex_dict):
    filtered_dict = {}

    for a in complex_dict.values():
        for b in a:
            for c in b.values():
                for d in c:
                    for e,f in d.items():
                        if e not in filtered_dict:
                            filtered_dict[e] = {}

                        filtered_dict[e].update(f)

    return filtered_dict

complex_dict = {'lst_0': [{'127.0.0.1': [{'key2': {'CHG': ['entry8'],'asm': 'entry7'}}]},{'127.0.0.1': [{'key2': {'DU': 'entry10','PL': 'entry9'}}]},{'127.0.0.1': [{'key2': {'DU': 'entry12','SL': 'entry11'}}]}],'lst_1': [{'127.0.0.1': [{'key1': {'CHG': ['entry2'],'asm': 'entry1'}}]},{'127.0.0.1': [{'key1': {'DU': 'entry4','PL': 'entry3'}}]},{'127.0.0.1': [{'key1': {'DU': 'entry6','SL': 'entry5'}}]}]}

print(filteredDict(complex_dict))

## OUTPUT:
# {'key1': {'CHG': ['entry2'],#           'DU': 'entry6',#           'PL': 'entry3',#           'SL': 'entry5',#           'asm': 'entry1'},#  'key2': {'CHG': ['entry8'],#           'DU': 'entry12',#           'PL': 'entry9',#           'SL': 'entry11',#           'asm': 'entry7'}}

我想这里没有什么可解释的,因为这只是一堆嵌套循环来获取过滤字典所需的值。

我很好奇为什么你的字典有这种结构。如果可以并且有能力,我建议您重构您的字典,这样您就不必处理这种嵌套循环。