如何通过比较值找到字典中的最大值?

时间:2013-12-08 12:59:31

标签: python python-2.7 max

有一种方法可以找到表示字典中最高值的键(在Python中) this问题。我想尽管有点不同。

想象一下,我们有一本字典D,比如说:

   D = {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}

我希望通过循环键的值来找到字典的最大值,每次比较两个键的值,然后“记住”表示局部变量中最高值的键。最后,我应该在D中找到密钥及其最大值。在这种情况下,我们应该有这样的东西:

compare('a', 'q') --> remember q
compare('q', 'b') --> remember b
compare('b', 'c') --> remember b

最大键现在为'b',值为3.

但是如何比较for循环中键的值?我该怎么做:

for k,v in D.iteritems() : 
    if (dictitem) > (dictitem + 1) : 
        remember = dictitem 
    else : 
        remember = dictitem + 1 

但是现在实际上有效吗?

6 个答案:

答案 0 :(得分:5)

>>> D = {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}
>>> max(D, key=D.get)
'b'

答案 1 :(得分:2)

@ henices的答案很棒,你应该使用它。但是为了给你一个关于如何实现max函数的一般说明:

D = {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}
my_max_val = 0
for k,v in D.items():
    if v > my_max_val:
        my_max_val=v
        my_max_key=k


>>> my_max_val
3
>>> my_max_key
'b'

答案 2 :(得分:1)

我认为这可能是另一种方法。您可以使用operator.itemgetter:

import operator
mydict = {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}
max(mydict.iteritems(), key=operator.itemgetter(1))[0]

而不是在内存中构建新列表使用stats.iteritems()。 max()函数的关键参数是一个计算用于确定如何对项目进行排名的键的函数。这适用于有两个最大instread为1的情况。就像

的情况一样
mydict = { 'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2 , 'd' : 7 , 'e' : 8 , 'd' : '4' }

这种情况下的输出为'd'。因为d的值之一是max。

答案 3 :(得分:0)

看起来你想在for循环中找到最大数量而不是使用像max这样的内置函数,我编写代码如下,我希望它对你有用。

  D= {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}
  for index, k in enumerate(D.iterkeys()):
      if  not index:
         remember = k 
     else:
         if D[k] > D[remember]:
            remember = k 
  print remember

答案 4 :(得分:0)

zenpoy的方法以一个可能不是有效结果的值开始。如果问题是找到 minimum 值的密钥,则该方法将失败。你想要的是什么(除了使用max(D,key = D.get)方法)

D = {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}
my_max_val = None
for k,v in D.items():
    if my_max_val is None:
        my_max_val=v
        my_max_key=k
    elif v > my_max_val:
        my_max_val=v
        my_max_key=k

答案 5 :(得分:0)

由于你想在for循环中这样做,你可以试试zenpoy的方法。但请确保像MattNewville一样使用my_max_val更好的初始化。

以下是与您在问题中提供的结构类似的方法。 `

D = {'a' : 1 , 'q' : 2,  'b' : 3, 'c': 2}
li = D.keys()
j = len(li)
for i in range(0,j-1):
    if D[li[i]]>D[li[i+1]]:
        maxi = D[li[i]]
    else:
        maxi = D[li[i+1]]