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:逐层判断 if 'a' in d and 'b' in d['a'];或 try/except KeyError;或用 dict.get 链式 d.get('a', {}).get('b')。
Q:has_key() 方法呢?
A:Python 2 的旧方法,Python 3 已移除,统一用 in。