确定具有大多数值的密钥

时间:2017-02-26 01:18:14

标签: python dictionary

dictionary = {"key1": ["Item1", "Item2"], "key2": ["Item3", "Item4"]}

使用上面的字典,尝试迭代它并返回包含大多数值的键。

我正在尝试这个:

def most_values(a):
    return max(a, key=a.get)

虽然它会返回它先检查的任何键,但这并不错。接下来我尝试了:

def most_values(a):
    count = 0
    high = ""
    for t in a:
        if len(a[t]) > count:
            count += 1
            high = t
    return high

但是它会做同样的事情并且会返回它首先迭代的任何键。它也不是一个非常优雅的解决方案。

最常见的 Pythonic 方法是什么?

2 个答案:

答案 0 :(得分:4)

问题:

return max(a, key=a.get)

就是key 返回实际列表,而Python 列表按字典顺序进行比较,所以不是长度 (有两种方法可以比较列表,但他们决定按字典顺序排序)。但是,您可以使用以下方法轻松修改此内容:

def most_values(a):
    return max(a, key=lambda x:len(a[x]))

这可能是 Pythonic 方式,因为它是声明(你不必认为 计算最大值),< em>优雅,可读并且没有副作用

第二种方法的问题是,您应count设置为新的len(a[t]) ,而不是增加它。所以你可以解决它:

def most_values(a):
    count = -1
    high = None
    for key,val in a.items():
        if len(val) > count:
            count = len(val) # semantical error in your code
            high = key
    return high

答案 1 :(得分:2)

怎么样:

sorted(dictionary.iteritems(), key=lambda x:len(x[1]), reverse=True)[0][0]

sorted()对东西进行排序。 dictionary.iteritems()是dict中key:value对的迭代器。 key将收到这样一对并使用其中的第2项(值)作为其比较的东西。 reverse = True会使它从大到小排序。第一个[0]将返回&#34;最大的&#34;键值对和第二个[0]将返回键

或者与Willem Van Onsem的想法一致,因为它更清洁