#python #list #dictionary
#python #Список #словарь
Вопрос:
У меня есть список dict, подобный этому
[
{'id':1,'product_id':20,'price':50,'quantity':1, 'name':'product_2'},
{'id':2,'product_id':20,'price':50,'quantity':1, 'name':'product_2'},
{'id':3,'product_id':30,'price':20,'quantity':4, 'name':'product_3'},
]
как я могу сгруппировать этот список и получить такой результат
[
{'id':1,'product_id':20,'price':100,'quantity':2, 'name':'product_2'},
{'id':3,'product_id':30,'price':20,'quantity':4, 'name':'product_3'},
]
спасибо ♥
Комментарии:
1. Stackoverflow предназначен не для того, чтобы делать за вас домашнюю работу.
2. lol это не так homework.im склоняюсь к кодированию, и я просто застрял и нуждаюсь в некоторой подсказке 😞😞
Ответ №1:
Вам необходимо сгруппировать словари на основе общего ключа (например, product_id). Это можно сделать, преобразовав список словарей в словарь словарей. Затем вы объединяете аддитивные ключи в каждом уникальном экземпляре словарей в группах.
aList= [
{'id':1,'product_id':20,'price':50,'quantity':1, 'name':'product_2'},
{'id':2,'product_id':20,'price':50,'quantity':1, 'name':'product_2'},
{'id':3,'product_id':30,'price':20,'quantity':4, 'name':'product_3'},
]
groups = dict() # product_id:dictionary
for d in aList:
group = groups.setdefault(d["product_id"],d) # add/get first occurrence
if group is not d:
group["price"] = d["price"] # combine additive fields
group["quantity"] = d["quantity"] # for duplicates
aList = list(groups.values()) # convert groups back to a list
print(aList)
[{'id': 1, 'product_id': 20, 'price': 100, 'quantity': 2, 'name': 'product_2'},
{'id': 3, 'product_id': 30, 'price': 20, 'quantity': 4, 'name': 'product_3'}]