如何将字典列表与内部列表连接起来

我有一个带有内部列表和字典的字典列表,我需要将它们连接到一个大字典中。名单是这样的:


[{'total': {'last_day': '7'}}, 

 {'total': {'progress': '07/04'}}, 

 {'total': {'piecies': '3008'}}, 

 {'total': {'week': ['16.0']}}, 

 {'total': {'week': ['17.0']}}, 

 {'total': {'week': ['15.0']}}, 

 {'total': {'week': ['17.0']}}, 

 {'total': {'week': ['16.0']}}, 

 {'total': {'week': ['13.0']}}, 

 {'total': {'week': ['6.0']}}, 

 {'tkts': [{'tktvalue': '13.5'}]}, 

 {'tkts': [{'month': {'consuntivato_pezzi': '2346'}}]}, 

 {'tkts': [{'month': {'consuntivato_euro': '31671.00'}}]}, 

 {'tkts': [{'month': {'preventivato_pezzi': '9897'}}]}

]

我尝试了一些 for 循环和递归函数,但没有很好的结果


for vars in temporary_var:

    for title in vars:

        try:

            try:

                table_var[title].update(vars[title])

            except KeyError:

                table_var[title] = vars[title]

        except AttributeError:

            table_var[title].append(vars[title][0])

但我只能得到这个:


{'total': {'last_day': '7', 'progress': '07/04', 'volumes': '3008', 'week': ['6.0']}, 'tkts': [{'service': 'SOSPC'}, {'tktvalue': '13.5'}, {'month': {'volumes1': '2346'}}, {'month': {'volumes2': '31671.00'}}, {'month': {'volumes3': '98

97'}}]}

但我需要这个:


{'total': {'last_day': '7', 'progress': '07/04', 'volumes': '3008', 'week': ['16.0', '17.0', '15.0', '17.0', '16.0', '13.0','6.0']}, 'tkts': [{'service': 'SOSPC', 'tktvalue': '13.5', 'month': {'volumes1': '2346', 'volumes2': '31671.00', 'volumes3': '9897'}}]}


潇湘沐
浏览 210回答 2
2回答

慕尼黑8549860

试试这个,它会得到你想要的输出:lst=[{'total': {'last_day': '7'}}, {'total': {'progress': '07/04'}}, {'total': {'piecies': '3008'}}, {'total': {'week': ['16.0']}}, {'total': {'week': ['17.0']}}, {'total': {'week': ['15.0']}}, {'total': {'week': ['17.0']}}, {'total': {'week': ['16.0']}}, {'total': {'week': ['13.0']}}, {'total': {'week': ['6.0']}}, {'tkts': [{'tktvalue': '13.5'}]}, {'tkts': [{'month': {'consuntivato_pezzi': '2346'}}]}, {'tkts': [{'month': {'consuntivato_euro': '31671.00'}}]}, {'tkts': [{'month': {'preventivato_pezzi': '9897'}}]}]d={} # the dictionary that will hold the resultfor dd in lst: # for each dictionary in the list of dictionaries    for key,value in dd.items():        if key not in d: # key does not exist in dictionary d            d[key]=value        else: # key exists in dictionary d            if isinstance(value,dict): # check if the value is a dictionary or a list                for key1,value2 in value.items():                    if key1 not in d[key]:                        d[key]={**d[key],**value} # combine the dictionaries                    else:                        d[key][key1].append(value2[0])            elif isinstance(value,list): # check if the value is a  list                if isinstance(value[0],dict): # check if the value is a dictionary or a list                    for key1,value2 in value[0].items():                        if key1 not in d[key][0]:                            d[key][0]={**d[key][0],**value[0]}                        else:                            d[key][0][key1]={**d[key][0][key1],**value2}print(d)输出:{'total': {'last_day': '7', 'progress': '07 / 04 ',' piecies ':' 3008 ',' week ': ['16 .0', '17 .0' , '15 .0', '17 .0', '16 .0', '13 .0',' 6.0 ']},' tkts ': [{' tktvalue ': '13 .5', '月' :{'consuntivato_pizzi':'2346','final_euro':'31671.00','quoted_pieces':'9897'}}]}

缥缈止盈

尝试在此处使用默认列表。您可以了解有关它们的更多信息collections.defaultdictfrom collections import defaultdictresult = defaultdict(list)for sequence in (yourdict):    for keys,dictionary in sequence.items():          result[keys].append(dictionary)print(dict(result))输出 :{'total': [{'last_day': '7'}, {'progress': '07/04'}, {'piecies': '3008'}, {'week': ['16.0']}, {'week': ['17.0']}, {'week': ['15.0']}, {'week': ['17.0']}, {'week': ['16.0']}, {'week': ['13.0']}, {'week': ['6.0']}], 'tkts': [[{'tktvalue': '13.5'}], [{'month': {'consuntivato_pezzi': '2346'}}], [{'month': {'consuntivato_euro': '31671.00'}}], [{'month': {'preventivato_pezzi': '9897'}}]]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python