作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望从键的对应值中获取字典中第 x 大的项。
例如,对于字典:
y = {'a':55, 'b':33, 'c':67, 'd':12}
我希望能够轻松提取 'b'
作为第三大键。
最初,当我只在前三个出现之后时,我复制了字典,找到最大值(例如在 Getting key with maximum value in dictionary? 之后),从最大值中删除键,然后重新运行。当寻找多个最高值时,这种方法显得相当麻烦。有没有一种简单的方法可以获取第x大项对应的key?
最佳答案
使用 heap queue算法:
import heapq
y = {'a':55, 'b':33, 'c':67, 'd':12}
print heapq.nlargest(n=3, iterable=y, key=y.get)[-1]
# b
对于大型词典,这比每次都对整个词典进行排序会更好。具体来说,对于 n
元素的字典,您要在其中寻找 k
最大的元素,这在 O(n log k)
中运行O(n log n)
。
另请注意,这会按照列表的顺序为您提供所有三个最大值,只需删除 [-1]
:
print heapq.nlargest(n=3, iterable=y, key=y.get)
# ['c', 'a', 'b']
关于python - 获取字典中第 x 大项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932225/
我希望从键的对应值中获取字典中第 x 大的项。 例如,对于字典: y = {'a':55, 'b':33, 'c':67, 'd':12} 我希望能够轻松提取 'b' 作为第三大键。 最初,当我只在
我是一名优秀的程序员,十分优秀!