2013-02-15 48 views
0

有很多例子可以顯示如何在字典中找到最大值。我很好奇,爲什麼最大的鍵/值不能以這種方式找到。for循環字典找到最大

from random import randint 

# Create dict with random keys and values. 
d = {randint(1, 99): randint(1, 99) for i, j in enumerate(range(20))} 

# Loop through dict to find max value 
maxi = 0 
for key in d: 
    if d[key] > maxi: 
     maxi = key 

print(d, d[maxi]) 

目視確認d,它可以看出,d [MAXI]不是最大值。

+0

如果指定'key'參數,則可以使用'max()'函數。例如:'max(d,lambda x:d [x])' – Matt 2013-02-15 03:24:37

+0

你不應該使用0作爲原始的最大值,除非你總是在字典中有正數。 – 2013-02-15 03:25:06

+1

@Matt沒有必要在那裏醜陋的lambda。使用'max(d,key = d.get)' – wim 2013-02-15 03:47:32

回答

4

if d[key] > maxi正在比較當前的與最大值密鑰。最簡單的變化是編寫if d[key] > d[maxi]。 (你也可以保留最大值作爲自己的變量)。

0
>>> d = {"a": 5, "b": 99, "c": 3} 
>>> max(d, key=d.get) 
'b' 
+1

更好的是'max(d,key = d.get)' – wim 2013-02-15 03:46:33

1

與您的代碼的問題是,你第一次找到的值大於0您存儲關鍵,而不是價值。然後,您將下一個與您存儲的最後一個進行比較。

你到底存儲是不是你想要的號碼(我不知道是否有甚至在maxi結束了數邏輯 - 我猜是另一種隨機數)。

0

這另一種方法是使用字典項目()功能得到鍵,值和比較值,找到最大。

max_key = None 
max_val = None 

for key, val in your_dict.items(): 

    if max_val is None or val > max_val: 
     max_val = val 
     max_key = key 


print(max_key, max_val)