如何获得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的方式,在很少的代码行)。
因此,最简单的方法是:- 查找最大值
- 查找值最大的键中较大的键
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])