You need to enable JavaScript to run this app. Python字典值顺序异常及如何通过键获取对应值对比输入停止距离的问题
优惠活动
大模型
产品
解决方案
定价
更多

Python字典值顺序异常及如何通过键获取对应值对比输入停止距离的问题

问题答疑与解决方案

1. set顺序错乱的原因

set是无序哈希集合结构,设计目标是快速判断元素存在性、自动去重,本身不会保留元素插入时的顺序,存入时会根据元素的哈希值自动调整存储位置,所以你提取字典值转set后顺序和插入顺序不一致是正常特性,和字典本身的顺序无关。
而且你当前的需求完全不需要提取所有值存set,直接通过车速键取对应标准距离即可。

2. 字典取值的正确写法

不管是普通Python字典(Python3.7及以上版本默认保留插入顺序)还是OrderedDict,通过键获取对应值的语法都是字典变量[键名],你代码里写的values.values[speed]是错误用法:values()是字典的内置方法,返回所有值的可迭代视图,不能用来按键取值。
你要获取输入车速对应的标准停车距离,直接写values[speed]即可。

3. 完整可运行实现代码

不需要额外用OrderedDict,Python3.7+普通字典就满足顺序要求,代码如下:

# 车速(km/h)为键,对应标准安全停车距离(m)为值
valid_speed = {20: 6, 30: 14, 40: 24, 50: 38, 60: 55, 70: 75}

# 获取输入的车速,转为整数
speed = int(input("Enter the test speed> "))

# 校验车速是否在预设范围内
if speed not in valid_speed:
    print(f"当前输入的车速{speed}不在支持的测试范围内,支持的车速为{list(valid_speed.keys())}")
else:
    # 获取标准安全距离
    standard_dist = valid_speed[speed]
    # 获取实际停车距离
    actual_dist = int(input("Enter the stopping distance> "))
    # 对比判断
    if actual_dist <= standard_dist:
        print(f"停车距离符合要求:当前车速{speed}km/h对应标准安全距离为{standard_dist}m,实际停车距离{actual_dist}m")
    else:
        print(f"停车距离不符合要求:当前车速{speed}km/h对应标准安全距离为{standard_dist}m,实际停车距离{actual_dist}m,超出安全范围")

如果必须用OrderedDict兼容旧版本Python,仅修改字典定义部分即可,逻辑完全一致:

from collections import OrderedDict
valid_speed = OrderedDict([(20,6), (30,14), (40,24), (50,38), (60,55), (70,75)])
# 后续逻辑和上面代码完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 18:33:03