2013-05-15 110 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']