假设我有一本字典:
data = {'a':1, 'b':2, 'c': 3, 'd': 3}
Run Code Online (Sandbox Code Playgroud)
我想获得字典中的最大值。到目前为止,我一直在做:
max(zip(data.values(), data.keys()))[1]
Run Code Online (Sandbox Code Playgroud)
但我知道我可能会错过另一个最大值。解决这个问题的最有效方法是什么?
根据您的示例,您似乎正在寻找映射到最大值的键。 您可以使用列表理解:
[k for k, v in data.items() if v == max(data.values())]
# ['c', 'd']
Run Code Online (Sandbox Code Playgroud)
如果你有一本很大的字典,把它分成两行,以避免计算尽可能多的项目的最大值:
mx = max(data.values())
[k for k, v in data.items() if v == mx]
Run Code Online (Sandbox Code Playgroud)
在 Python 2.x 中,您将需要.iteritems()
.
您可以尝试value -> key
在 a 中收集反向对defaultdict
,然后输出具有最高键的值:
from collections import defaultdict
def get_max_value(data):
d = defaultdict(list)
for key, value in data.items():
d[value].append(key)
return max(d.items())[1]
Run Code Online (Sandbox Code Playgroud)
哪些输出:
>>> get_max_value({'a':1, 'b':2, 'c': 3, 'd': 3})
['c', 'd']
>>> get_max_value({'a': 10, 'b': 10, 'c': 4, 'd': 5})
['a', 'b']
Run Code Online (Sandbox Code Playgroud)