You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字典中提取任意数量的最小值对应的键?

提取字典中指定数量最小值对应的键

场景说明

原代码仅能提取对应单一最小值的键,若要提取对应前N个最小值的键,可根据具体需求选择以下实现方式:


方式一:提取对应前k个最小不同值的所有键

如果需要收集所有对应前k个最小数值的键(比如最小的2个数值,不管每个数值对应多少个键),步骤如下:

  1. 提取字典中所有不重复的值,排序后取前k个最小值
  2. 遍历字典,收集所有值属于这k个最小值的键

代码示例:

scores = {
    0:1.3399288498085087,
    1:1.2672683347433629,
    3:1.6999159970296505, 
    4:1.8410942584597279,
    5:1.336658057628646
}

k = 2  # 要取前2个最小值对应的键

# 提取不重复的值并排序,取前k个
sorted_unique_values = sorted(set(scores.values()))[:k]
# 收集对应键
minimum_keys = [key for key, val in scores.items() if val in sorted_unique_values]

print(minimum_keys)  # 输出: [0, 1, 5]

方式二:提取前k个最小的键值对对应的键(含重复值)

如果只需要按值从小到大取前k个键值对的键(即使有多个键对应同一个值,也只取到第k个为止),可以用以下两种方法实现:

方法A:用sorted全排序

直接对字典的键值对按值升序排序,取前k个的键:

scores = {
    0:1.3399288498085087,
    1:1.2672683347433629,
    3:1.6999159970296505, 
    4:1.8410942584597279,
    5:1.336658057628646
}

k = 2
# 按值升序排序键值对,取前k个的键
sorted_items = sorted(scores.items(), key=lambda x: x[1])
minimum_keys = [item[0] for item in sorted_items[:k]]

print(minimum_keys)  # 输出: [1, 5]

方法B:用heapq高效获取(适合大字典)

当字典规模很大时,heapq.nsmallest无需全排序,直接定位前k个最小元素,性能更优:

import heapq

scores = {
    0:1.3399288498085087,
    1:1.2672683347433629,
    3:1.6999159970296505, 
    4:1.8410942584597279,
    5:1.336658057628646
}

k = 2
# 获取前k个最小的键值对,提取键
smallest_items = heapq.nsmallest(k, scores.items(), key=lambda x: x[1])
minimum_keys = [item[0] for item in smallest_items]

print(minimum_keys)  # 输出: [1, 5]

内容的提问来源于stack exchange,提问作者Jared Greathouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:07:30