[英]Getting the item with the maximum value in list of dicts after grouping the dict by key
我有一个看起来像这样的字典列表:
[{'apples': 99}, {'bananas': '556685'}, {'apples': 88}, {'apples': '2345566'}]
我想按键对项目进行分组,然后返回具有最高值的项目的键? 也就是说,将所有苹果的值相加,然后将所有香蕉的值相加,则广告返回较高的值–苹果或香蕉,我似乎找不到一种很好的方法,因此我尝试避免使用一堆循环和计数器变量。
(只是出于好奇,这是否可能是单线的?如果可以,怎么做?)
将所有值更改为整数后:
import itertools as it
a = [{'apples': 99}, {'bananas': 556685}, {'apples': 88}, {'apples': 2345566}]
max((sum(i.values()[0] for i in v), k) for k,v in it.groupby(sorted(a), key=lambda x: x.keys()[0]))[1]
# 'apples'
如果删除结尾的[1]
,它甚至会给您总和:
# (2345753, 'apples')
不完全是单线的,但是我喜欢使用collections.Counter
来完成这类任务,因为我发现它很可读:
from collections import Counter
from itertools import chain
from operator import itemgetter
a = [{'apples': 99}, {'bananas': 556685}, {'apples': 88}, {'apples': 2345566}]
c = Counter()
for k, v in chain.from_iterable([d.items() for d in a]):
c[k] += v
print max(c.items(), key=itemgetter(1))[0]
尝试这个:
reduce(lambda m,n:m if int(m[1])>=int(n[1]) else n,map(lambda p:p.items()[0],a))
我猜它不会排序,但是会为您提供最高的一行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.