如何在字典中查找多个最大值

时间:2017-12-10 05:55:03

标签: python dictionary

尝试分析一些字符串并计算它们出现的次数。该数据存储在字典中。如果我使用max函数,则仅打印遇到的第一个最高数字。

count = {"cow": 4, "moo": 4, "sheep": 1}
print(max(count.keys(), key=lambda x: count[x]))
cow

这会使母牛成为最大的。我怎么会得到"牛"和" moo"两个都打印

count = {"cow": 4, "moo": 4, "sheep": 1}
cow, moo

2 个答案:

答案 0 :(得分:4)

为什么不保持简单?

mx = max(count.values())
print([k for k, v in count.items() if v == mx])
# ['cow', 'moo']

第二行中括号内的表达式是list comprehension,基本上是一个for循环的简写,它在一个类似列表的对象(一个“可迭代”)上运行并创建一个新的列表作为它顺其自然。在这种情况下,一个微妙的是有两个循环变量(kv)同时运行它们的值由元组解包(.items()返回一对(键,值)一个另一个)。总结一下这里的列表理解大致相当于:

result = []
for k, v in count.items():
    if v == mx:
        result.append(k)

但是一旦你习惯了,列表理解会运行得更快,也更容易阅读。

答案 1 :(得分:1)

只需将计数分组为defaultdict,并取最大值:

from collections import defaultdict

count = {"cow": 4, "moo": 4, "sheep": 1}

d = defaultdict(list)
for animal, cnt in count.items():
    d[cnt].append(animal)

print(dict(d))
# {4: ['cow', 'moo'], 1: ['sheep']}

print(max(d.items())[1])
# ['cow', 'moo']