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

Python使用推导式获取字典指定键值报错或返回空值问题排查

错误原因

三个失败方案的核心问题是完全搞反了字典键值的匹配逻辑:

  • 你调用operating_hrs.values()拿到的遍历对象全是字典里存的数值:8、6、5、3、5.25、0这些工时数字,判断条件却写的是day == v,也就是拿字符串"FRIDAY"和数字做相等比较,永远不可能匹配成功,筛选出来的结果自然是空列表。
  • 方案1直接取空列表的第0个元素,必然触发IndexError: list index out of range报错,而且报错里还出现了未定义的变量x,属于额外笔误。
  • 方案2没有取索引,直接返回空列表。
  • 方案3额外写的v[0]逻辑完全无效:values()返回的都是整数、浮点数,根本不支持下标索引,就算真匹配到值也会触发类型错误。
正确实现方法

Python字典本身就原生支持按键快速查值,根本不需要写列表推导遍历,常用写法有两种:

  • 确定键一定存在时,直接用键做索引即可,写法最简洁:
operating_hrs = {'MONDAY': 8, 'TUESDAY': 6, 'WEDNESDAY': 5, 'THURSDAY': 8, 'FRIDAY': 3, 'SATURDAY': 5.25, 'SUNDAY': 0}
day = "FRIDAY"
friday_hrs = operating_hrs[day]
print(friday_hrs)  # 输出:3
  • 不确定键是否存在时,用get()方法避免触发KeyError,还可以自定义键不存在时的返回值:
# 键存在返回对应值,不存在默认返回None,也可以自己传第二个参数当默认值,比如operating_hrs.get(day, 0)
friday_hrs = operating_hrs.get(day)
print(friday_hrs)  # 输出:3

要是硬要用列表推导遍历实现(非常不推荐,性能比原生按键查值差很多),得遍历键值对、匹配键而不是匹配值:

friday_hrs = [v for k, v in operating_hrs.items() if k == day][0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:01:09