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

Posted

技术标签:

【中文标题】如何获得具有相同最高值的所有键?【英文标题】:How to get all the keys with the same highest value? 【发布时间】:2014-11-03 22:05:01 【问题描述】:

如果我有一本带有相应频率值的字典:

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

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

【问题讨论】:

【参考方案1】:
numbers = 'a': 1, 'b': 0, 'c': 1, 'd': 3, 'e': 3
max_value = max(numbers.values())


[k for k,v in numbers.items() if v == max_value]

打印

 ['e', 'd']

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

【讨论】:

【参考方案2】:
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)。

【讨论】:

【参考方案3】:

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)

【讨论】:

【参考方案4】:

您可以使用 .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]

【讨论】:

以上是关于如何获得具有相同最高值的所有键?的主要内容,如果未能解决你的问题,请参考以下文章

当所有检索值在laravel中具有相同的会话键时,如何检查会话数组是不是具有唯一的ID

如果json对象键在javascript中具有所有相同的值,如何检查并返回true?

如何在键具有数组的多维数组中求和所有相同的键值?

Django模型基于外键自动递增主键

当两个ID在Scala中具有相同的最高价格时,以较小的ID获得最高价格

将字典中具有相同值的所有键组合在一起,并将键与值交换,将值与键交换