过滤字典并删除最低值

时间:2018-06-01 13:08:52

标签: python python-3.x dictionary

我的字典如下。有没有办法输出具有5个最高值的字典?

如果存在第5个最高值的关系,我需要包含这些键。

输入字典

{
    "1": 1,
    "12": 1,
    "13":2,
    "3": 5,
    "5":8,
    "7":3,
    "4":8,
    "10":7
}

期望的结果:

{
    "3": 5,
    "5":8,
    "7":3,
    "4":8,
    "10":7
}

2 个答案:

答案 0 :(得分:3)

关系会计:

val = sorted(d.values(), reverse=True)[4]
res = {k: v for k, v in d.items() if v >= val}

print(res)

{'3': 5, '5': 8, '7': 3, '4': 8, '10': 7}

<强>解释

  • 使用sorted reverse=True计算第5个最高值。请记住索引从0开始,因此索引为[4]
  • 使用词典理解从词典中选择值大于计算值的所有项目。

<强>优化

@Chris_Rands指出,更有效的方法是使用heapq计算第5个最高值:

import heapq

val = heapq.nlargest(5, d.values())[-1]
res = {k: v for k, v in d.items() if v >= val}

答案 1 :(得分:1)

from  collections import Counter
dict(Counter(your_dict).most_common(5))

输出:

{'10': 7, '3': 5, '4': 8, '5': 8, '7': 3}
相关问题