You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迭代dict时删除元素的方式正确吗?两种写法是否安全且性能更优?

按条件删除Python字典元素的写法说明

安全性验证

两种写法均满足安全性要求,不会出现遍历过程中修改字典导致的报错:
Python原生不允许在遍历字典的动态视图(dict.items()、dict.keys()、dict.values()返回的都是和原字典实时同步的视图)时修改字典的长度,否则会直接抛出RuntimeError,你的两种写法都规避了这个问题:

  • 第一种写法遍历的是dict_items.copy()生成的原字典浅拷贝,遍历对象和原字典完全独立,删除原字典的键不会对遍历过程产生任何影响
  • 第二种写法遍历的是list(dict_items.keys())生成的静态键列表,和原字典也是相互独立的,修改原字典同样不会干扰遍历。注意你写的示例代码存在小语法笔误,for key in list(dict_items.keys())末尾缺少冒号:,实际运行时需要补上。

开销对比

修改后的写法开销确实更低:

  • 第一种写法的copy()操作会对整个字典做浅拷贝,除了所有键之外,还会生成所有值的引用拷贝,当字典存储的元素量级大、或者值为大对象时,内存和时间开销都会更高
  • 第二种写法只生成包含所有键的列表,不需要拷贝值的相关引用,开销更小,在字典数据量越大的场景下优势越明显。

可选的简洁写法

如果你的使用场景允许生成新字典替代修改原字典,Python 3.7+下可以用更简洁的字典推导式实现,代码可读性更高:

# 保留所有不满足删除条件的键值对
dict_items = {k: v for k, v in dict_items.items() if not some_condition}

该写法会生成新的字典对象替换原变量,如果代码中有其他地方引用了原字典对象,修改不会同步到对应引用,可根据实际需求选择。

内容的提问来源于stack exchange,提问作者marlon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:06:03