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,不报错
批量删除多个键
keys_to_remove = ['a', 'b']
for k in keys_to_remove:
d.pop(k, None)
# 或用字典推导式重建(保留想要的)
d = {k: v for k, v in d.items() if k not in keys_to_remove}
注意事项
遍历时删除会报错:
# 错误:RuntimeError: dictionary changed size during iteration
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', None) 就行;或 if 'key' in d: del d['key']。