Как я могу сгруппировать список, если он имеет одинаковое значение?

#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'}]