如何获取字典中值最大的N个键并保留其在原字典中的先后顺序
实现方案
Python 3.7及以上版本默认保留字典的插入顺序,只需要两步即可实现需求:
- 先提取字典中值最大的N个值,存入集合方便后续快速校验
- 按原字典的顺序遍历所有键值对,只要值属于前N大的集合就保留到结果中
完整代码示例
# 原字典 original_dict = {'gfg': 1, 'best': 6, 'geeks': 3, 'for': 7, 'is': 4} N = 3 # 步骤1:获取前N大的值集合 top_n_values = set(sorted(original_dict.values(), reverse=True)[:N]) # 步骤2:按原字典顺序筛选符合条件的键 result = [key for key, val in original_dict.items() if val in top_n_values] print(result)
运行输出:
['best', 'for', 'is']
逻辑说明
- 用
sorted对所有值做降序排序后取前N个,转成集合是为了把后续的in判断时间复杂度降到O(1),数据量小的情况下不转集合直接判断也可以 - 直接遍历原字典的键值对,就能保证最终结果的顺序和原字典中键的顺序完全一致
- 如果遇到值重复的场景,只需调整
sorted的排序规则即可适配你的筛选需求
内容的提问来源于stack exchange,提问作者Fat Cat
相关产品推荐
相关产品推荐

