【问题标题】:Consolidate list of dictionaries elements in dictionary合并字典中的字典元素列表
【发布时间】:2021-01-22 02:25:36
【问题描述】:

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

输入结构:

{'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’}}

【问题讨论】:

    标签: python dictionary consolidation


    【解决方案1】:

    这个人能胜任。

    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'}}
    

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

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

    【讨论】:

    • 感谢您的解决。我知道这是字典的复杂结构,但这是来自上游,我必须自己处理。
    猜你喜欢
    • 2021-08-11
    • 2017-04-11
    • 2017-10-17
    • 2021-07-29
    • 1970-01-01
    • 2016-05-06
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多