如何在Python中合并具有相似值的字典?



我有一个问题。

Input=[
{'id':uuid1(),'name':'mem','point':[{'second':0,'severity':'infor'}],'date':'2021-09-15','PO':5},
{'id':uuid1(),'name':'cpu','point':[{'second':10,'severity':'warning'}],'date':'2021-09-13','PO':3},
{'id':uuid1(),'name':'cpu','point':[{'second':20,'severity':'critical'}],'date':'2021-09-14','PO':3},
{'id':uuid1(),'name':'cpu','point':[{'second':30,'severity':'infor'}],'date':'2021-09-15','PO':3}]

将在这个数组中进行比较。如果名称相同,我将合并该字典的所有值。

表示组合键'point'的所有值。我将使用multi - dict键列表point

我们有许多重复的密钥name = 'cpu'。所以我要把所有相同的值组合起来。你看,我们有PO相同的值(PO=3, name=cpu)。如果不同,我们将取最后一个值(最后一个值'date':'2021-09-15')。最后,我们将关键点列表中的字典附加在一起

预期的结果

Output=[
{'id':uuid1(),'name':'mem','point':[{'second':0,'severity':'infor'}],'date':'2021-09-15','PO':5},
{'id':uuid1(),'name':'cpu','point':[{'second':10,'severity':'warning'},
{'second':20,'severity':'critical'},
{'second':30,'severity':'infor'}],'date':'2021-09-15','PO':3}
]

注意:我使用python 3.6

我希望有人能帮助我。非常感谢

可能有更好的方法来做到这一点,但以下工作:

a=[{'name':'mem','point':[{'second':0,'severity':'infor'}],'date':'2021-09-15','PO':5},
{'name':'cpu','point':[{'second':10,'severity':'warning'}],'date':'2021-09-13','PO':3},
{'name':'cpu','point':[{'second':20,'severity':'critical'}],'date':'2021-09-14','PO':3},
{'name':'cpu','point':[{'second':30,'severity':'infor'}],'date':'2021-09-15','PO':3}]
b=[]

for i in a:
for j in b: 
if i['name'] == j['name']:
j['point'] += i['point']
break
else:
b.append(i)

最新更新