2013-02-15 123 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)