获取与python dict中的max(value)对应的Key

时间:2013-05-15 15:44:43

标签: python dictionary key

让我们考虑(键,值)对的样本字典如下:

 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)如果一个dict只有一个对应于max(value)的键,那么结果应该只是一个字符串(即Key)。示例:上面的dict2应该返回'j'

    b)如果一个dict有多个对应于max(value)的键,那么结果应该是字符串列表(即键)。示例:上面的dict1应该返回['j','g']

2 个答案:

答案 0 :(得分: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']

答案 1 :(得分:7)

你可以这样做:

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