2013-05-15 75 views
5

让我们考虑的(键,值)对样本字典如下:获取在Python字典的关键对应到最大(值)

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. 有可能是最大值(值)一个以上的密钥 例:以上dict1应返回[ 'J', 'G']上述 dict2应返回 'J'

    a)如果dict有b)如果dict有多个键对应max(value),则结果应该是字符串列表(iekeys)。

+0

返回一个字符串或字符串列表似乎可能会导致不必要的分支la之三。 90%的时间你总是返回一个列表。 – DSM

回答

6

你可以这样做:

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

如果字典对于相应的max(val)有多个关键字,则它不起作用。有关更多详细信息,请参阅上面更新的dict1和dict2定义。 – Kumar

+0

您的新代码将无法使用,因为'maxval'不是最大值,而是其中一个达到最大值的键。 – DSM

+0

@DSM :) Blunder !!非常感谢。 – karthikr

7

使用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']