Python 怎么删除字典里的某个键?附 3 种方法讲清楚

编程狮(w3cschool.cn) 2026-08-18 14:18:38 浏览数 (66)
反馈

Python 删除字典键封面

你正攥着一个 Python 字典,想干掉里面某一个键,却拿不准用 del 还是 pop,更怕一不小心把整个字典搞崩。最直接的办法是:Python 删除字典键用 del 语句最直白,用 pop 方法还能顺手拿到被删的值,用字典推导式则能一次性批量剔除多个键。三种方式没有绝对的优劣,关键看你需不需要那个被删掉的值。今天这篇文章,编程狮就把 Python 字典删键的三种写法一次讲透,帮你在该用 del 时用 del、该用 pop 时用 pop,不再被 KeyError 绊住。在配置解析、缓存清理、接口返回裁剪这些场景里,删键几乎天天见;而键不存在时直接 del 会抛异常,先判断再删才是稳的写法。

一、先搞清楚:删键到底删的是什么

在 Python 字典里,每一个元素都是"键 : 值"成对存在的。所谓删键,本质是只把某个键连同它绑定的值一起移除,其他键值对原封不动。你删掉的是"钥匙",顺带消失的是这把钥匙能打开的那份数据。

理解这一点很重要:Python 字典是无序可变的映射类型,在 Python 3.7 之后还会保留插入顺序。删键不会改变剩下键的内容,只是让字典变短了一截。所以当你说"我要删掉 user 这个键",意思就是把 user 和它对应的值从字典里彻底拿走。

💡 小提示:如果删键后还想留着那份数据做别的处理,就别用 del——del 是"删完即焚",数据当场消失;想留值的场景要用 pop。

1.1 键不存在时会怎样

这是新手最容易踩的第一个坑。Python 字典在你删除一个并不存在的键时,会直接抛出 KeyError,程序如果没做异常处理就会中断。

⚠️ 注意:生产代码里删除外部传入的键之前,一定要先判断键是否存在,否则一条脏数据就能让接口返回 500。

1.2 一个常见误解

有人以为 del 能"删不掉也不报错",其实不能。要安全删除,得用后面会讲到的"先判断"或者 pop 的默认值写法,而不是依赖 del 自己兜底。

二、方法一:del 语句(最直白)

del 是 Python 里专门用来删除对象的语句,用在字典上就是"删掉这个键"。它的语法最短,意图最清楚:就是要删,不要返回值。

user = {"name": "小明", "age": 18, "city": "北京"}
del user["age"]
print(user)   # {'name': '小明', 'city': '北京'}

上面这段里,del user["age"] 直接把 age 这个键连同它的值一起拿掉,执行后 user 里就只剩 name 和 city 了。这是最常用、最直观的删键方式,适合"我确定这个键存在、而且删完不需要它的值"的场景。

如果你想顺便处理列表类数据,之前那篇 Python 列表去重 里也用到了字典做计数,可以对照理解"键"在这两种结构里扮演的角色。

⚠️ 注意:如果 user 里根本没有 "age",del user["age"] 会抛 KeyError。确认键存在再 del,是写生产代码的基本功。

三、方法二:pop 方法(删完还能拿回值)

pop 是 Python 字典自带的方法,它做两件事:一是删除指定的键,二是把被删键对应的值作为返回值还给你。当你删键后还想用那份数据,pop 就是首选。

user = {"name": "小明", "age": 18, "city": "北京"}
removed = user.pop("age")
print(removed)   # 18
print(user)      # {'name': '小明', 'city': '北京'}

上面这段里,user.pop("age") 删掉了 age,同时把 18 存进了 removed 变量,后面还能接着用。这就是 pop 和 del 最大的区别:del 是"丢",pop 是"取走"。

pop 还有一个安全开关——可以传第二个参数当默认值。键不存在时不会报错,而是返回你给的默认值:

user = {"name": "小明"}
value = user.pop("age", None)
print(value)   # None(不会抛异常)

💡 小提示:用 pop 的默认值写法,比"先判断再 del"更简洁,一行就能安全删键。

四、方法三:字典推导式(批量删多个键)

如果你要一次删掉好几个键,逐个 del 会写得很啰嗦。字典推导式可以反向筛选——只保留你不想删的键,从而"删掉"其余的。

user = {"name": "小明", "age": 18, "city": "北京", "token": "abc"}
drop = {"age", "token"}
user = {k: v for k, v in user.items() if k not in drop}
print(user)   # {'name': '小明', 'city': '北京'}

上面这段里,我们列出要丢弃的键集合 drop,然后用推导式重建字典,只保留不在 drop 里的键。效果等同于把 age 和 token 都删了,但写起来更干净,尤其适合"按白名单保留"的场景。

关于数据来源,很多接口返回的是 JSON,而 JSON 在 Python 里就是 dict 类型,之前那篇 Python 读取 JSON 讲过怎么把 JSON 转成 Python 字典,转完之后这套删键方法就能直接派上用场。

五、三种方式怎么选,以及两个坑

选型口诀很简单:确定键存在、不要值,用 del;删完还要用那份值,用 pop;要一次性删一堆键,用字典推导式。最稳的默认习惯是——凡是外部传入的键,优先用 pop 的默认值写法,避免 KeyError。聊完 Python 字典删键的三种写法,你会发现"要不要那个值"才是选方法的唯一标准。

坑一:直接 del 不存在的键。 上面说过会抛 KeyError。解决:用 pop("key", None) 或先 if "key" in d: 判断再删。

坑二:以为 pop 和 del 一样"不要值"。 pop 会返回被删的值,如果你写了 user.pop("age") 却没接住返回值,那个值就真的丢了;而 del 压根不返回,逻辑上更"决绝"。混淆二者容易在调试时找不到数据去哪了。

⚠️ 注意:字典推导式是"重建"而非"原地删",它会生成新字典并重新赋值给变量。如果你在外面还有别的地方引用着旧字典,它们看到的仍是旧内容,这点做缓存或共享状态时尤其要留心。

Python 三种删键方式对比

总结

Python 删除字典键,核心是选对工具:del 最直白但不返回值、会抛 KeyError;pop 删完能拿回值、还能用默认值安全防崩;字典推导式适合批量按白名单保留。日常开发里,处理外部数据时优先用 pop 的默认值写法最稳。请记住最关键的一点——删之前先确认键是否存在,别让一个不存在的键把程序打断。把这套逻辑吃透,你处理配置、缓存和接口返回时都会更从容。

常见问题

Q:del 和 pop 到底该用哪个?
A:不要返回值、且确认键存在,用 del 最干净;删完还想用那个值,或者键可能不存在需要防崩,就用 pop。新手处理不确定来源的数据时,pop 的默认值写法更省心。

Q:怎么安全地删除一个可能不存在的键?
A:用 d.pop("key", None),键不存在时返回 None 而不报错;或者先写 if "key" in d: 再 del。两种都能避免 KeyError。

Q:想一次删掉多个键,有没有更短写法?
A:用字典推导式按白名单保留:{k: v for k, v in d.items() if k not in drop},其中 drop 是要删的键集合。比逐个 del 更直观,也更好维护。

延伸学习

想把 Python 基础打牢,可以按这个顺序来:

  1. 先过一遍 Python3 教程,把字典、列表这些内置类型的增删改查铺平;
  2. 具体语法和内置方法记不住时,Python 速查手册 能随时翻查;
  3. 想跟着视频边看边练,Python 入门课 是循序渐进的形式,适合巩固上手。

0 人点赞