Я хочу объединить список словарей на основе одной пары ключ-значение. У меня есть список словарей как
[{'id':1, 'total':100,'free_from':250},{'id':2,....},{'id':1,......}]
Я хочу создать из этого списка новый словарь с той же структурой, но если идентификатор одинаков для двух словарей, их общее количество должно быть добавлено вместо добавления словаря в новыйlist.
Это список словарей
products = [{'id':1,'total':20,'free_from':250,},{'id':2,'total':30,'free_from':150},{'id':1,'total':10,'free_from':250,},{'id':1,'total':10,'free_from':250},{'id':2,'total':40,'free_from':150, }]
, ожидаемый результат -
[{ 'id': 1,'total': 40, 'free_from': 250}, {'id': 2,'total': 70, 'free_from': 150}]
Мне удалось добиться этого с помощью следующего метода. Но было бы очень полезно, если бы кто-нибудь помог мне найти лучший способ сделать это.
category_delivery_list=[]
products = [
{
'id':1,
'total':20,
'free_from':250,
},{
'id':2,
'total':30,
'free_from':150,
},{
'id':1,
'total':10,
'free_from':250,
},{
'id':1,
'total':10,
'free_from':250,
},{
'id':2,
'total':40,
'free_from':150,
}
]
for data in products:
if category_delivery_list:
index = None
for count, cat in enumerate(category_delivery_list):
if cat['id'] == data['id']:
index=count
if index >= 0:
category_delivery_list[index]['total'] += data['total']
category_delivery_list[index]['free_from'] = data['free_from']
else:
category_delivery_list.append({
'id':data['id'],
'total':data['total'],
'free_from':data['free_from']
})
else:
category_delivery_list.append({
'id':data['id'],
'total':data['total'],
'free_from':data['free_from']
})
print(category_delivery_list)