获取python字典中最大值的最大键



如何获得python字典中值最大的最大键?在下面的例子中,你可以看到1和2有相同的频率。但是我想返回较大的键

nums = [1,2,2,3,1]
frq = {}

for i in nums:
if i not in frq:
frq[i] = 1
else:
frq[i] += 1

frequency = max(frq, key=frq.get)
print(frequency)

让您的key函数返回值和关联键的元组。首先比较元组的第一个元素,第二个元素将打破关系。

>>> from collections import Counter
>>> nums = [1, 2, 2, 3, 1]
>>> frq = Counter(nums)
>>> max(frq, key=lambda n: (frq[n], n))
2

注意collections.Counter在给定nums时自动构建frq字典。

您可以对键使用元组比较,根据它们的频率比较键,然后只有在频率相同时才根据键的实际值进行分拆:

frequency = max(frq, key=lambda x: (frq.get(x), x))

修改后,输出:

2

您可以试试这个,它先按频率排序,然后按键排序:

nums = [1,2,2,3,1]
frq = {}

for i in nums:
if i not in frq:
frq[i] = 1
else:
frq[i] += 1

frequency = max(frq, key=lambda x: (frq.get(x), x))
print(frequency)

输出:

2

或者,您可以使用Python的collections模块中的Counter数据类型为您完成一些工作:

from collections import Counter
nums = [1,2,2,3,1]
frequency = max(Counter(nums).items(), key=lambda x: (x[1], x[0]))[0]
print(frequency)

这里我们将items()传递给max(),这样键和值对于键函数(lambda)都是可用的。max()的结果现在将是一个(key, value)元组,所以我们使用[0]来获取键作为结果。

另一种不将默认的key参数覆盖到max()的方法是:

frequency = max((v, k) for k, v in Counter(nums).items())[1]

首先,如果你发现自己遇到了麻烦,试着找到最简单的解决方案。然后,你可以优化它,在效率或可读性方面(或以python的方式,在很少的代码行)。

因此,最简单的方法是:
  1. 查找最大值
  2. 查找值最大的键中较大的键
nums = [1,2,2,3,1]
d = Counter(nums)
max_val = max(d.values())
max_key = max([key for key, value in d.items() if value == max_val])

相关内容

  • 没有找到相关文章

最新更新