Python 中如何删除字典里的某个键?
删除字典的键:del d['key'] 直接删除(键不存在报错);d.pop('key', 默认值) 删除并返回值,允许键不存在时可使用默认值。本文对比两种方法及批量删除。
两种方式:del d['key'] 直接删除(键不存在抛 KeyError);d.pop('key', None) 删除并返回对应的值,键不存在时返回默认值而不报错——允许键不存在时可给 pop 传默认值;若缺键说明程序有误,应保留异常。
del 语句
d = {'a': 1, 'b': 2, 'c': 3}
del d['b']
print(d) # {'a': 1, 'c': 3}
键不存在时抛 KeyError,使用前可先判断 if 'b' in d:。
pop() 方法
d = {'a': 1, 'b': 2, 'c': 3}
value = d.pop('b') # 删除并返回 2
value = d.pop('x', None) # 键不存在,返回 None,不报错
如果已有值本身也可能是 None,pop(key, None) 无法区分“缺键”和“值为 None”;需要区分时使用唯一的 object() 哨兵。
批量删除多个键
keys_to_remove = ['a', 'b']
for k in keys_to_remove:
d.pop(k, None)
# 或用字典推导式重建(保留想要的);这会让 d 指向新字典,其他引用不随之改变
d = {k: v for k, v in d.items() if k not in keys_to_remove}
注意事项
遍历时删除可能报错或漏掉条目:
# 不安全:可能抛 RuntimeError 或漏掉条目
for k in d:
if d[k] < 0:
del d[k]
# 正确:遍历键的副本
for k in list(d):
if d[k] < 0:
del d[k]
常见问题(FAQ)
Q:del 和 pop 性能有差别吗?
A:通常平均为 O(1),并非所有情况下的最坏时间保证。区别只在 pop 返回值、支持默认值。
Q:能按键的某个模式批量删吗?
A:键都是字符串时,可用 d = {k: v for k, v in d.items() if not k.startswith('tmp_')}。如果键有多种类型,调用字符串方法前要先判断类型并明确保留规则。
Q:删除不存在的键但不想写默认值?
A:不传默认值的 d.pop('key') 仍会抛 KeyError。可以先判断 if 'key' in d: del d['key'];d.pop('key', None) 则是显式传入默认值的另一种写法。