在Python字典中获取与最大值对应的键。

7

让我们考虑以下样例字典(键、值对):

 dict1 = {'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28, 'g' : 90}
 dict2 = {'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28}

在所有字典值中,90是最高的。我需要检索与之对应的键或键。
有哪些可能的方法可以完成此操作?哪种方法最有效,为什么?
注意:
1. 字典的键和/或值不按顺序排列。程序会不断向字典中添加新的(键,值)对。 2. max(value)可能对应多个键。 a)如果一个字典只有一个键对应于max(value),那么结果应该是一个字符串(即Key)。例如:上面的dict2应该返回'j' b)如果一个字典有多个键对应于max(value),那么结果应该是字符串列表(即keys)。例如:上面的dict1应该返回['j','g']

返回字符串或字符串列表似乎可能会导致后续出现不必要的分支。90% 的情况下,最好始终返回列表。 - DSM
2个回答

8
使用max()和列表推导式:
>>> dic = {'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28,"k":90}
>>> maxx = max(dic.values())             #finds the max value
>>> keys = [x for x,y in dic.items() if y ==maxx]  #list of all 
                                                   #keys whose value is equal to maxx
>>> keys
['k', 'j']

创建一个函数:
>>> def solve(dic):
    maxx = max(dic.values())
    keys = [x for x,y in dic.items() if y ==maxx] 
    return keys[0] if len(keys)==1 else keys
... 
>>> solve({'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28})
'j'
>>> solve({'a' : 10, 'x' : 44, 'f': 34, 'h':89, 'j': 90, 'd': 28, 'g' : 90})
['g', 'j']

7

你可以做:

maxval = max(dict.iteritems(), key=operator.itemgetter(1))[1]
keys = [k for k,v in dict.items() if v==maxval]

如果字典中有多个键对应的最大值,则它将无法正常工作。请参阅上面更新的dict1和dict2定义以获取更多详细信息。 - Kumar
你的新代码不会起作用,因为 maxval 不是最大值,而是达到最大值的其中一个键。 - DSM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接