Найти наибольшую сумму значений вложенного словаря
Подскажите пожалуйста, как через цикл перебрать словарь в списке, чтобы складывались значения ключа "qty" при одинаковых значениях ключа "price". То есть если 'price': '101' = 'price': '101' другого словаря, то тогда их 'qty': '845' + 'qty': '842' + 'qty': '840' После чего нужно вывести значение ключа 'price' c наибольшей суммой значений 'qty'.
Вот сами словари в списке.
d = [{'id': 434557, 'price': '101', 'qty': '564', 'time': 1655981435709 },
{'id': 434558, 'price': '100', 'qty': '657', 'time': 1655981435709},
{'id': 434559, 'price': '101', 'qty': '845', 'time': 1655981435709},
{'id': 434560, 'price': '55', 'qty': '909', 'time': 1655981435709},
{'id': 434558, 'price': '100', 'qty': '657', 'time': 1655981435709},
{'id': 434559, 'price': '101', 'qty': '842', 'time': 1655981435709},
{'id': 434558, 'price': '100', 'qty': '657', 'time': 1655981435709},
{'id': 434559, 'price': '101', 'qty': '840', 'time': 1655981435709}]
Ответы (3 шт):
dt = {}
for a in d:
try: dt[a['price']] += int(a['qty'])
except: dt[a['price']] = int(a['qty'])
m = max(dt.values())
print([k for k in dt if dt[k] == m])
Требование складывать по одной цене выглядит очень подозрительно. Несмотря на это складываем количества в словаре sums, ищем пару с максимумом суммы, печатаем эту пару:
import collections
sums = collections.defaultdict(int)
for row in d:
sums[row['price']] += int(row['qty'])
print(*max(sums.items(), key=lambda p: p[-1]))
если список словарей очень большой, то может быть оправданным использовать библиотеку pandas. тогда вывести значение ключа 'price' c наибольшей суммой значений 'qty' можно так:
import pandas as pd
res = pd.DataFrame(d).groupby('price')['qty'].agg(lambda x: x.astype(int).sum()).idxmax()
>>> res # '101'