合并具有相同词典列表的多个词典

问题描述 投票:0回答:1

所以我试图以这种格式解析传入的字典:

initial_dict = {
 "row_index_1":[
    {"ff":[{"temperature":33, "radiator":20.34, "heater":220},
           {"temperature":44, "radiator":10.33, "heater":55}]},
    {"fault":[]}
    ],
 "row_index_2":[
    {"ff":[]},
    {"fault":[{"fault_code":888, "fault_external_code":111},
              {"fault_code":333, "fault_external_code":101}]}
    ],
 "row_index_3":[
    {"ff":[]},
    {"fault":[{"fault_code":222, "fault_external_code":222},
              {"fault_code":549, "fault_external_code":202}]}
    ],
 "row_index_4":[
    {"ff":[{"temperature":18, "radiator":6.40, "heater":170},
           {"temperature":67, "radiator":10.90, "heater":80}]},
    {"fault":[]}
    ]
}

但是到目前为止,我仅设法转换了每个key:list-of-dicts,现在我需要根据转换后的字典输出将这些键合并。我想做的事情如下所示。

这是我当前的字典:

current_dict = {'row_index_1': {'temperature': [33, 44],'radiator': [20.34, 10.33], 'heater': [220, 55]},
                'row_index_2': {'fault_external_code': [111, 101], 'fault_code': [888, 333]}, 
                'row_index_3': {'fault_external_code': [111, 202], 'fault_code': [222, 459]},
                'row_index_4': {'temperature': [18,67],'radiator': [6.40, 10.90], 'heater': [170, 80]}}

我想要的输出字典:

desired_dict = {'ff': {'temperature': [33, 44, 18, 67],
                       'radiator': [20.34, 10.33, 6.40, 10.90],
                       'heater': [220, 55, 170, 80]},
                'fault': {'fault_external_code': [111, 101, 111, 202],
                          'fault_code': [888, 333, 222, 459]}

我设法获得了具有以下功能的current_dict

import operator
from functools import reduce

def dict_comprehension_flatten(input_list):
    """
    #TODO
    """
    all_keys = reduce(operator.or_, (d.keys() for d in input_list))
    print(all_keys)
    print(input_list)
    output_dict = {key: [d.get(key) for d in input_list] for key in all_keys}
    return output_dict

def convert_dict(input_dict, list_of_keys):
        """
        #TODO
        """

        output_dict = {}


        for row_index in input_dict.keys():
            for elem in input_json[row_index]:
                if list(elem.values())[0] != []:
                    output_dict[row_index] = dict_comprehension_flatten(list(elem.values())[0])
        return output_dict

dict_keys = ['ff', 'fault']    
current_dict = convert_dict(initial_dict, dict_keys)
json python-3.x dictionary dictionary-comprehension
1个回答
0
投票

这是一种使用嵌套迭代与dict.setdefault的方法。

Ex:

result = {}
for _, v in initial_dict.items():
    for i in v:
        for k, sv in i.items():
            if k not in result:
                result[k] = {}
            if sv:
                for values in sv:
                    for m, n in values.items():
                        result[k].setdefault(m, []).append(n)
print(result) 

输出:

{'fault': {'fault_code': [888, 333, 222, 549],
           'fault_external_code': [111, 101, 222, 202]},
 'ff': {'heater': [220, 55, 170, 80],
        'radiator': [20.34, 10.33, 6.4, 10.9],
        'temperature': [33, 44, 18, 67]}}
© www.soinside.com 2019 - 2024. All rights reserved.