繁体   English   中英

按键将字典分组后,获取字典列表中具有最大值的项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM