Python 中如何删除字典里的某个键?

删除字典的键:del d['key'] 直接删除(键不存在报错);d.pop('key', 默认值) 删除并返回值,允许键不存在时可使用默认值。本文对比两种方法及批量删除。

最佳实践
Python 中如何删除字典里的某个键?封面

两种方式: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) 则是显式传入默认值的另一种写法。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台