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

2024-09-28 05:17:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含内部列表和dict的dict列表,我需要将它们连接在一个大dict中。 列表如下:

[{'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'}}]}

Tags: 列表fortitlevartablevarsdicttotal
2条回答

尝试在此处使用默认列表。您可以进一步了解它们collections.defaultdict

from collections import defaultdict
result = 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'}}]]}

试试这个,它会得到你想要的输出:


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 result

for 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\u 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','month':{'consuntivato\u pezzi':'2346','consuntivato\u euro':'31671.00','preventivato\u pezzi':'9897'}}]

相关问题 更多 >

    热门问题