How to find multiple maximums in a dictionary
试图分析一些字符串并计算它们出现的次数。这些数据存储在字典中。如果要使用max函数,则只会打印遇到的第一个最高数字。
1 2 3 | count = {"cow": 4,"moo": 4,"sheep": 1} print(max(count.keys(), key=lambda x: count[x])) cow |
这将使"奶牛"成为最大值。我如何将"奶牛"和"驼鹿"都打印出来?
1 2 | count = {"cow": 4,"moo": 4,"sheep": 1} cow, moo |
号
为什么不简单一点?
1 2 3 | mx = max(count.values()) print([k for k, v in count.items() if v == mx]) # ['cow', 'moo'] |
号
第二行中带括号的表达式是一个列表理解,本质上是一个
1 2 3 4 | result = [] for k, v in count.items(): if v == mx: result.append(k) |
但是列表理解会运行得更快,而且一旦习惯了它,也更容易阅读。
只需将计数与
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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'] |