Как сгруппировать элементы списка
Как можно из данного списка:
stats = [
{
"userid": "123",
"nick": "user",
"count": 5
},
{
"userid": "321",
"nick": "user2",
"count": 5
},
{
"userid": "123",
"nick": "user",
"count": 5
}
]
Сделать такой:
[
{
"userid": "123",
"nick": "user",
"count": 10
},
{
"userid": "321",
"nick": "user2",
"count": 5
}
]
Ответы (2 шт):
Автор решения: AndroID
→ Ссылка
Можно так:
stats = [
{
"userid": "123",
"nick": "user",
"count": 5
},
{
"userid": "321",
"nick": "user2",
"count": 5
},
{
"userid": "123",
"nick": "user",
"count": 5
}
]
r = []
for stat in stats:
if stat not in r:
r += [stat]
print(r)
Автор решения: gil9red
→ Ссылка
Действия:
- Объединение списка по
useridв словарь с суммированием значенияcount - Получение значения словаря в список
Пример:
user_id_by_data = dict()
for x in stats:
user_id = x['userid']
if user_id not in user_id_by_data:
user_id_by_data[user_id] = x
else:
data = user_id_by_data[user_id]
data['count'] += x['count']
print(list(user_id_by_data.values()))
# [{'userid': '123', 'nick': 'user', 'count': 10}, {'userid': '321', 'nick': 'user2', 'count': 5}]