Python 中如何检查字典里是否存在某个键?

Python 检查字典键是否存在用 in 关键字:'key' in d。get() 方法带默认值也是常用方式。本文对比各种检查方法。

最佳实践
Python 中如何检查字典里是否存在某个键?封面

最 Pythonic 的写法:'key' in my_dict。需要顺便取值时用 my_dict.get('key', 默认值)。

in 关键字(推荐)

my_dict = {'a': 1, 'b': 2, 'c': 3}

if 'a' in my_dict:
    print("键存在")

in 对字典检查的是键(不是值),平均哈希查找通常为 O(1),极端碰撞等情况可退化。

get() 顺带取值

value = my_dict.get('a')        # 键不存在返回 None
value = my_dict.get('d', 0)     # 键不存在返回默认值 0

setdefault():不存在则写入

# 键存在返回现有值,不存在则写入默认值并返回
my_dict.setdefault('d', 4)   # d 不存在,写入 {'d': 4}

常用于"确保键存在"的初始化场景,会修改字典;默认参数表达式即使键已存在也先求值。

注意:区分"不存在"和"值为 None"

d = {'a': None}

d.get('a') is None      # True——但键是存在的!
'a' in d                # True

get() 返回 None 时分不清是"键不存在"还是"值就是 None"。要严格区分用 in 或带哨兵值:d.get('a', sentinel)。

常见问题(FAQ)

Q:检查值是否存在?
A:value in d.values(),复杂度 O(n)。

Q:检查嵌套字典的键?
A:先确认中间值确实是映射,再逐层判断。d.get('a', {}).get('b') 仅处理 a 缺失,a 已存在但为 None/非映射时仍报错;try/except KeyError 也不捕获此类类型错误。

Q:has_key() 方法呢?
A:Python 2 的旧方法,Python 3 已移除,统一用 in。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台