You need to enable JavaScript to run this app. Python如何以函数式方式移除字典元素并返回新字典
优惠活动
大模型
产品
解决方案
定价
更多

Python如何以函数式方式移除字典元素并返回新字典

Python 纯函数式移除字典条目(无副作用、不修改原字典)的实现方案

方法1:字典推导式(全版本兼容,最推荐)

所有Python 3版本均支持该写法,无需额外依赖,遍历原字典键值对时过滤掉需要移除的条目,自动生成全新字典,全程不会修改原字典数据。
示例代码:

original_dict = {"a": 1, "b": 2, "c": 3}
# 移除键为 "b" 的条目,返回全新字典
new_dict = {k: v for k, v in original_dict.items() if k != "b"}

print(original_dict)  # 输出 {"a":1, "b":2, "c":3} 原数据完全无改动
print(new_dict)        # 输出 {"a":1, "c":3} 处理后的新字典

若需要一次性移除多个键,可调整过滤条件,推荐将待移除的键存入集合(集合的成员判断为O(1)效率更高):

exclude_keys = {"b", "c"}
new_dict = {k: v for k, v in original_dict.items() if k not in exclude_keys}

该写法完全符合纯函数的要求:相同输入永远得到相同输出,无任何外部副作用。

方法2:复制原字典后操作副本(适合待移除键较多的场景)

如果待移除的键数量较多,推导式的过滤条件编写反而繁琐,可先对原字典做浅拷贝,再对副本执行删除操作,原字典完全不受影响:

original_dict = {"a": 1, "b": 2, "c": 3, "d":4}
# 生成原字典的完整副本
new_dict = original_dict.copy()
# 对副本执行删除操作,不会改动原字典
del new_dict["b"]
new_dict.pop("c")

print(original_dict)  # 原字典保留全部4个键,无修改
print(new_dict)        # 新字典仅剩 {"a":1, "d":4}

若需要一行完成该逻辑,可配合Python 3.8+支持的lambda表达式:

new_dict = (lambda d: (d.pop("b"), d)[1])(original_dict.copy())

注意事项

  • 上述方法中的字典拷贝默认是浅拷贝,如果原字典的键值为可变对象(比如列表、嵌套字典),拷贝后的字典和原字典会共享这些可变值的引用。如果需要完全隔离的深拷贝,可导入标准库copy,使用copy.deepcopy(original_dict)生成副本后再操作。
  • 原生的del dict[key]、dict.pop(key)不符合函数式要求的核心原因,是二者直接操作原字典本身,修改了内存中的原数据,且不会返回处理后的新字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 10:54:05