如果我有一个字典及其相应的频率值:
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
或类似的东西,显示两个键。
答案 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]
。