Python 中如何检查字典里是否存在某个键?
Python 检查字典键是否存在用 in 关键字:'key' in d。get() 方法带默认值也是常用方式。本文对比各种检查方法。
最 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。