2017-01-02 81 views
1

我試圖找出字典中最大的價值,而且我在這方面遇到了一些麻煩。 這裏是我的代碼:發現字典中最大的價值

def most_fans(dictionary): 
    empty = '' 
    for key in dictionary: 
     if len(dictionary[key]) > next(dictionary[key]): 
      empty = key 
    print(empty) 

我知道我的代碼的問題,如果我有一本字典,因爲像這樣的:

fans={'benfica': ['joao','ana','carla'], 
     'sporting': ['hugo','patricia'], 
     'porto': ['jose']} 

輸出將是既'benfica''sporting'。因爲本菲卡較大然後運動,但體育比波多還大。然而,這是我提出的最好的。

有人可以告訴我一個體面的方式來做到這一點嗎?

+0

你試過'MAX()'? –

+0

「最大價值」是指「最長字符串值」還是「最長列表」或其他?而在你的例子數據中,不應該是'benfica',因爲它的列表長度爲3? –

+0

我有,它仍然是我的結果相同,我沒有得到爲什麼,所以我嘗試了一些不同的... –

回答

3

你可以只使用max()用鑰匙:

>>> max(fans, key=lambda team:len(fans[team])) 
'benfica' 

這裏:

  • max(fans, ...)迭代的fans鍵尋找根據一些最大的元素(即,隊名)標準;
  • lambda函數指定該條件(在本例中爲團隊擁有的粉絲數)。
0
>>> max_val = lambda xs: max(xs.iteritems(), key=lambda x: len(x[1])) 
>>> max_val(fans) 
('benfica', ['joao', 'ana', 'carla']) 
2

如果你有兩個團隊相同數量的球迷:

fans = {'benfica':['joao','ana','carla'], 
     'sporting':['hugo','patricia', 'max'], 
     'porto':['jose']} 

max()辦法給你只是其中之一:

>>> max(fans, key=lambda team:len(fans[team])) 
'benfica' 

使用collections.Counter,你可以得到最常見的:

>>> from collections import Counter 
>>> counts = Counter({k: len(v) for k, v in fans.items()}) 
>>> counts.most_common(2) 
[('benfica', 3), ('sporting', 3)] 

或全部:

>>> counts.most_common() 
[('benfica', 3), ('sporting', 3), ('porto', 1)] 
+0

我相信'counts.most_common(len(計數))== counts.most_common()' –

+0

你是對。固定。謝謝。 –