本文介绍如何用字典推导式高效、简洁地从字典列表中批量移除指定键,替代传统 for 循环 + del 的冗余写法,提升代码可读性与 pythonic 程度。
在处理字典列表(如金融持仓数据)时,常需剔除冗余字段(如 description、market_value、cost),仅保留核心键(如 symbol 和 quantity)。原始代码通过遍历 + 多次 del 操作实现,虽功能正确,但存在三个问题:可读性弱、易出错(如键不存在时报 KeyError)、无法函数式复用。
更 Pythonic 的解法是采用字典推导式 + 集合差集运算,一行完成字段过滤:
positions_list = [
{'symbol': 'ARDX', 'description': 'ARDELYX INC', 'quantity': 18.0, 'cost': 162.18, 'market_value': 163.08},
{'symbol': 'GCT', 'description': 'GIGACLOUD TECHNOLOGY I FCLASS A', 'quantity': 2.0, 'cost': 51.4, 'market_value': 51.24},
{'symbol': 'IMPP', 'description': 'IMPERIAL PETROLEUM INC F', 'quantity': 90.0, 'cost': 312.3, 'market_value': 303.3},
{'symbol': 'MREO', 'description': 'MEREO BIOPHARMA GROUP FUNSPONSORED ADR 1 ADR REPS 5 ORD SHS', 'quantity': 21.0, 'cost': 82.32, 'market_value': 82.32}
]
# 定义需删除的键集合(自动去重,支持任意顺序)
to_delete = {"description", "market_value", "cost"}
# 使用字典推导式:对每个字典 d,只保留 keys() 与 to_delete 的差集中的键
positions_list = [{k: d[k] for k in d.keys() - to_delete} for d in positions_list]✅ 优势解析:
:d.keys() - to_delete 自动跳过不存在的键,无需 if d in key 判断,避免 KeyError; ⚠️ 注意事项:
def drop_keys_inplace(dicts, keys_to_drop):
keys_set = set(keys_to_drop)
for d in dicts:
for k in keys_set & d.keys(): # 仅删除当前字典中存在的键
del d[k]总结:Pythonic 的核心在于用声明式表达代替命令式步骤。用字典推导式替代循环 del,不仅代码更短,更体现了对语言特性的深度理解——让代码自解释,而非靠注释说明“我在删什么”。
# python
# 金融
# cos
# 代码可读性
# red
# if
# for
# 封装
# 循环
# 并发
# symbol
# 对象
# 不存在
# 我在
# 遍历
# 只需
# 重写
# 而非
# 跳过
# 持仓
# 如何用
# 移除
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
新手学PHP架构总混淆概念咋办_重点梳理【教程】
Linux怎么修改用户密码_Linux系统passwd命令使用与权限管理【方法】
短链接怎么自定义还原php_修改解码规则适配需求【汇总】
Go 中的 := 运算符:类型推导机制与使用边界详解
用Python构建微服务架构实践_FastAPI与Django对比详解
如何在 Django 中安全修改用户密码而不使会话失效
作用域操作符会影响性能吗_php静态调用性能分析【教程】
How to Properly Use NumPy in VS Code
Win11玩游戏全屏闪退怎么办_Win11全屏优化禁用设置【教程】
如何使用正则表达式批量替换重复的星号-短横模式为固定字符串
Win11开始菜单打不开_修复Windows 11点击开始图标无响应【教程】
静态属性修改会影响所有实例吗_php作用域操作符下静态存储【教程】
Win11怎么设置闹钟_Windows 11时钟应用闹钟设置指南【详解】
Win11如何设置文件权限 Win11 NTFS文件夹所有权与安全设置【高级】
Windows10怎样设置家长控制_Windows10家长控制设置方法【指南】
Go 语言标准库为何不提供泛型 Contains 方法?
php删除数据怎么清空表_truncate与delete区别及用法【汇总】
c++协程和线程的区别 c++异步编程模型对比【核心】
Win11怎么设置夜间模式_Windows11显示设置蓝光过滤强度
php怎么操作Redis_Redis扩展连接与基本命令使用方法【方法】
Python安全爬虫设计_IP代理池与验证码识别策略解析
如何使用Golang反射创建map对象_动态生成键值映射
Python日志系统设计与实现_高可观测性架构实战
Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】
Linux怎么实现内网穿透_Linux安装Frp客户端与服务端配置【方法】
MySQL 中使用 IF 和 CASE 实现查询字段的条件映射
Win11怎么设置任务栏对齐方式_Windows11个性化任务栏行为
Windows11如何设置专注助手_Windows11专注助手使用攻略【技巧】
如何用列表一次性对 DataFrame 的指定列应用字典映射
Win11怎么设置组合键快捷方式_Windows11自定义快捷键操作
c++如何使用std::bind绑定函数参数_c++ 占位符std::placeholders使用【详解】
Win11怎么关闭防火墙通知_屏蔽Win11安全中心安全警告弹窗【技巧】
php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】
PHP中require语句后直接调用返回对象方法的语法解析
如何使用Golang encoding/json解析JSON_Golang encoding/json解析与序列化示例
Python网页解析流程_html结构说明【指导】
c++中如何使用虚函数实现多态_c++多态性实现原理
Golang如何避免指针逃逸_Golang逃逸分析与堆栈优化策略
Win11怎么设置多显示器任务栏 Win11扩展任务栏至多屏方便跨屏操作【技巧】
Win11文件夹预览图不显示怎么办_Win11缩略图缓存重建修复【教程】
如何在 ACF 中正确更新嵌套多层 Group 字段内的子字段
Win11怎么设置单手模式_Win11触控键盘布局调整教程【技巧】
c++中如何对数组进行排序_c++数组排序算法汇总
Win10系统怎么查看网络连接状态_Windows10网络和共享中心
Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】
如何在Golang中实现WebSocket广播_使用Channel和协程分发消息
php修改数据怎么批量改状态_批量更新status字段值技巧【操作】
如何在Golang中验证模块完整性_Golanggo.sum校验与安全实践
Win11如何开启telnet服务 Win11启用Telnet客户端【步骤】
c++如何实现多态性_c++ 虚函数表原理与动态绑定机制【教程】
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。