尝试分析一些字符串并计算它们出现的次数。该数据存储在字典中。如果我使用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
答案 0 :(得分:4)
为什么不保持简单?
mx = max(count.values())
print([k for k, v in count.items() if v == mx])
# ['cow', 'moo']
第二行中括号内的表达式是list comprehension,基本上是一个for
循环的简写,它在一个类似列表的对象(一个“可迭代”)上运行并创建一个新的列表作为它顺其自然。在这种情况下,一个微妙的是有两个循环变量(k
和v
)同时运行它们的值由元组解包(.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']