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

Python:在存在键跳跃的字典中查找各组最小值对应的键

字典连续键组中最小值对应键的查找方案

核心思路

先把字典的按键从小到大排序,再根据键之间的间隔大小划分连续组,最后在每个组里找出对应值最小的键。

具体实现步骤

  1. 排序键值:不管字典原本的顺序,先把所有按键按数值排序,确保处理顺序正确。
  2. 确定分组阈值:可以手动指定(适合已知数据规律的情况),也可以通过计算相邻键的平均间隔动态生成(适合大数据量、未知规律的情况)。
  3. 划分连续组:遍历排序后的键,相邻键的间隔小于阈值就归为同一组,超过阈值就开启新组。
  4. 提取每组最小值键:对每个组,用min函数直接根据对应的值找出最小的键。

代码示例(支持大数据量)

myDict = {
        0.98:0.001,
        1.0:0.002,
        1.02: 0.0001,
        3.52:0.01,
        3.57:0.004,
        3.98: 0.005,
        4.01: 0.02,
        6.87: 0.01,
        6.90:0.02,
        6.98:0.001,
        7.0: 0.02
}

# 1. 对键按数值排序
sorted_keys = sorted(myDict.keys())

# 2. 动态计算分组阈值(用相邻间隔平均值的2倍,可根据数据调整倍数)
differences = [sorted_keys[i+1] - sorted_keys[i] for i in range(len(sorted_keys)-1)]
avg_diff = sum(differences) / len(differences)
threshold = avg_diff * 2

# 3. 划分连续键组
groups = []
current_group = [sorted_keys[0]]
for key in sorted_keys[1:]:
    if key - current_group[-1] <= threshold:
        current_group.append(key)
    else:
        groups.append(current_group)
        current_group = [key]
groups.append(current_group)  # 加入最后一组

# 4. 找出每组中值最小的键
result = [min(group, key=lambda k: myDict[k]) for group in groups]

# 输出结果
print(", ".join(map(str, result)))  # 输出:1.02, 3.57, 6.98

注意事项

  • 手动指定阈值时,得根据实际数据的间隔情况调整,比如示例中组内最大间隔是0.03,组间间隔是2.5,设阈值0.1就能准确分组。
  • 动态阈值的倍数可灵活调整,如果组内间隔波动大,可把倍数调到3或更高。
  • 处理超1000个元素的字典时,这个方法的时间复杂度主要来自排序(O(n log n)),运行效率足够高。

内容的提问来源于stack exchange,提问作者Aida Lf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:44:55