发现字典中的最大值

discovering the biggest value in a dictionary

我试图找出字典中的最大值,但我遇到了一些麻烦。 这是我的代码:

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'。因为本菲卡比体育大,但体育也比波尔图大。然而这是我想出的最好的。

有人可以告诉我一个合适的方法吗?

你可以只使用 max() 和一个键:

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

这里:

  • max(fans, ...)遍历fans(即队名)的key,根据某种准则寻找最大的元素;
  • lambda 函数指定了该标准(在此示例中,球队拥有的粉丝数量)。
>>> max_val = lambda xs: max(xs.iteritems(), key=lambda x: len(x[1]))
>>> max_val(fans)
('benfica', ['joao', 'ana', 'carla'])

如果你有两支球迷数量相同的球队:

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)]