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

如何在键值对字典中查找输入数值的上下邻近键值项

问题

给定一个映射层级名称到数值的字典,以及一个目标数值,需要找到该数值对应的最近的下层级和最近的上层级的完整键值对(保留层级名称和对应数值),而非仅提取数值。

示例场景:

levels = {"Level 1": 3.9, "Level 2": 4.5, "Level 3": 5.6, "Level 4": 9.2, "Level 5": 11.93}
current_number = 6.3

期望输出:{'upper_level': {'Level 4': 9.2}, 'lower_level': {'Level 3': 5.6}}

解决方案

核心思路是将字典的键值对转换为有序列表(按数值排序),这样既能保留键的信息,又能方便找到相邻的上下层级。

完整实现代码:

levels = {"Level 1": 3.9, "Level 2": 4.5, "Level 3": 5.6, "Level 4": 9.2, "Level 5": 11.93}
current_number = 6.3

def find_upper_lower(current_number, levels):
    # 将字典键值对转为列表并按数值升序排序
    sorted_levels = sorted(levels.items(), key=lambda item: item[1])
    lower_level = None
    upper_level = None

    # 遍历排序后的列表,定位上下层级
    for name, val in sorted_levels:
        if val < current_number:
            lower_level = {name: val}
        elif val > current_number:
            upper_level = {name: val}
            break  # 排序后第一个大于目标值的就是最近上层级,无需继续遍历

    # 处理边界情况:目标值小于所有层级数值
    if lower_level is None:
        lower_level = {sorted_levels[0][0]: sorted_levels[0][1]}
    # 处理边界情况:目标值大于所有层级数值
    if upper_level is None:
        upper_level = {sorted_levels[-1][0]: sorted_levels[-1][1]}

    return {"upper_level": upper_level, "lower_level": lower_level}

print(find_upper_lower(current_number, levels))
代码说明
  1. 排序键值对:用items()提取字典的键值对,再通过sorted()按数值排序,确保列表是从小到大排列的,同时保留层级名称。
  2. 遍历定位:遍历排序后的列表,更新小于目标值的最近层级为lower_level,遇到第一个大于目标值的层级时,设为upper_level并终止遍历(因为后续数值只会更大)。
  3. 边界处理:针对目标值小于所有层级、大于所有层级的情况,分别将第一个/最后一个层级设为对应结果。
输出结果
{'upper_level': {'Level 4': 9.2}, 'lower_level': {'Level 3': 5.6}}

内容的提问来源于stack exchange,提问作者Jeffrey Winger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:52:45