Python 中如何删除字典里的元素?
删除 Python 字典元素的三种方法:del 语句、pop() 方法(可带默认值避免 KeyError)、popitem() 删除并返回最后插入的项。本文对比三者用法与区别。
三种方式:del d['key'] 直接删除(键不存在会报 KeyError);d.pop('key', None) 删除并返回值,可设默认值避免报错;d.popitem() 删除并返回最后插入的键值对。
del 语句
my_dict = {'a': 1, 'b': 2, 'c': 3}
del my_dict['b']
print(my_dict) # {'a': 1, 'c': 3}
简洁直接,但键不存在时抛 KeyError。不确定键是否存在时先判断 if 'b' in my_dict。
pop() 方法
value = my_dict.pop('b', None)
print(value) # 2
print(my_dict) # {'a': 1, 'c': 3}
- 返回被删的值,删除的同时还能拿到数据;
- 第二个参数是默认值,键不存在时返回它而不抛异常——这是最安全的删法。
popitem() 方法
item = my_dict.popitem()
print(item) # ('c', 3),Python 3.7+ 删除最后插入的项
不需要指定键,适合"弹出一个任意/最新项"的场景。字典为空时抛 KeyError。
批量删除
for key in ['a', 'b']:
my_dict.pop(key, None)
注意:不要边遍历字典边删除(会抛 RuntimeError: dictionary changed size during iteration),应先收集要删的键再循环删除。
常见问题(FAQ)
Q:del 和 pop 性能有差别吗?
A:都是 O(1),差别只在 pop 多一个返回值和默认值特性,按语义选即可。
Q:如何按值删除?
A:字典按键索引,按值删除需要先找到对应的键:keys = [k for k, v in d.items() if v == target],再逐个 pop。
Q:清空整个字典?
A:d.clear() 原地清空;d = {} 是重新绑定新对象,其他引用旧字典的变量不受影响,语义不同。