如何获得具有相同最高值的所有键?

时间:2014-09-10 09:51:33

标签: python python-2.7 dictionary key

如果我有一个字典及其相应的频率值:

numbers = {a: 1, b: 4, c: 1, d: 3, e: 3}

要找到最高的,我所知道的是:

mode = max(numbers, key=numbers.get)
print mode

并打印:

b

但如果我有:

numbers = {a: 1, b: 0, c: 1, d: 3, e: 3}

并应用' max'上面的函数,输出是:

d

我需要的是:

d,e

或类似的东西,显示两个键。

4 个答案:

答案 0 :(得分:8)

numbers = {'a': 1, 'b': 0, 'c': 1, 'd': 3, 'e': 3}

[k for k,v in numbers.iteritems() if v == max(numbers.values())]

打印

 ['e', 'd']

它的作用是,通过.iteritems遍历所有条目,然后检查该值是否为最大值,如果是,则将该键添加到列表中。

答案 1 :(得分:0)

numbers = {'a': 1, 'b': 4, 'c': 1, 'd':4 , 'e': 3}
mx_tuple = max(numbers.items(),key = lambda x:x[1]) #max function will return a (key,value) tuple of the maximum value from the dictionary
max_list =[i[0] for i in numbers.items() if i[1]==mx_tuple[1]] #my_tuple[1] indicates maximum dictionary items value

print(max_list)

此代码适用于O(n)。 O(n)在列表理解中找到最大值和O(n)。总体而言,它将保持为O(n)。

注意:O(2n)相当于O(n)。

答案 2 :(得分:0)

collections.Counter对象对此也很有用。它为您提供了.most_common()方法,该方法将为您提供所有可用值的键和计数:

from collections import Counter
numbers = Counter({'a': 1, 'b': 0, 'c': 1, 'd': 3, 'e': 3})
values = list(numbers.values())
max_value = max(values)
count = values.count(max_value)
numbers.most_common(n=count)

答案 3 :(得分:0)

您可以使用 .items() 属性并在 count, key 元组之后排序 - 在类似的计数上,键将决定:

d = ['a','b','c','b','c','d','c','d','e','d','b']

from collections import Counter
get_data = Counter(d)

# sort by count, then key
maxmax = sorted(get_data.items(), key=lambda a: (a[1],a[0]) )
for elem in maxmax:
    if elem[1] == maxmax[0][1]:
        print (elem)

输出:

('a', 1) 
('e', 1)   # the last one is the one with "highest" key

要获得“最高”键,请使用 maxmax[-1]