如何在键值对字典中查找输入数值的上下邻近键值项
问题
给定一个映射层级名称到数值的字典,以及一个目标数值,需要找到该数值对应的最近的下层级和最近的上层级的完整键值对(保留层级名称和对应数值),而非仅提取数值。
示例场景:
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))
代码说明
- 排序键值对:用
items()提取字典的键值对,再通过sorted()按数值排序,确保列表是从小到大排列的,同时保留层级名称。 - 遍历定位:遍历排序后的列表,更新小于目标值的最近层级为
lower_level,遇到第一个大于目标值的层级时,设为upper_level并终止遍历(因为后续数值只会更大)。 - 边界处理:针对目标值小于所有层级、大于所有层级的情况,分别将第一个/最后一个层级设为对应结果。
输出结果
{'upper_level': {'Level 4': 9.2}, 'lower_level': {'Level 3': 5.6}}
内容的提问来源于stack exchange,提问作者Jeffrey Winger
相关产品推荐
相关产品推荐

