新闻中心
Python中处理嵌套字典与列表的数据提取与过滤教程

本文旨在指导读者如何在python中高效地从复杂的嵌套字典与列表结构中提取特定数据,并应用条件过滤。我们将通过一个实际案例,详细演示如何遍历多层数据结构,精准定位所需信息,并根据业务逻辑(如排除特定条件的数据)对结果进行筛选,最终生成一个结构清晰、符合要求的数据集。
引言:处理复杂数据结构的挑战
在Python开发中,我们经常需要处理来自API响应、配置文件或JSON文件等来源的复杂数据结构。这些数据通常以嵌套的字典和列表形式呈现,如何从中精准地提取所需信息并进行清洗,是数据处理的关键环节。本教程将以一个典型的嵌套数据结构为例,演示如何通过迭代和条件判断,实现数据的提取与过滤。
示例数据结构
假设我们有一个名为 repo 的Python字典,其结构如下所示。我们的目标是从这个结构中提取 balances 列表下的每个资产信息,但仅保留 asset、free 和 locked 这三个字段,并且需要排除那些 free 和 locked 值都为 '0' 的条目。
repo = {
'code': 200,
'msg': '',
'snapshotVos': [
{
'data': {
'balances': [
{'asset': 'ADD', 'free': '10', 'locked': '0'},
{'asset': 'RDP', 'free': '0', 'locked': '0'},
{'asset': 'SHIB', 'free': '0', 'locked': '947415'}
],
'totalAsset': '152'
},
'type': 'spot',
'updateTime': 1703807999000
}
]
}数据提取与过滤的步骤
为了实现目标,我们需要执行以下步骤:
- 定位到目标列表: 首先,我们需要导航到 snapshotVos 列表,然后进入其每个元素的 data 字典,最后找到 balances 列表。
- 遍历目标列表: 对 balances 列表中的每一个字典元素进行迭代。
- 应用过滤条件: 在每次迭代中,检查当前字典元素的 free 和 locked 字段。如果两者都为 '0',则跳过该条目。
- 提取指定字段: 对于符合条件的条目,提取 asset、free 和 locked 这三个字段的值,并将其组织成一个新的字典。
- 收集结果: 将所有符合条件且已提取字段的新字典收集到一个新的列表中。
实现代码
以下是实现上述逻辑的Python代码:
GoEnhance
全能AI视频制作平台:通过GoEnhance AI让视频创作变得比以往任何时候都更简单。
347
查看详情
repo = {
'code': 200,
'msg': '',
'snapshotVos': [
{
'data': {
'balances': [
{'asset': 'ADD', 'free': '10', 'locked': '0'},
{'asset': 'RDP', 'free': '0', 'locked': '0'},
{'asset': 'SHIB', 'free': '0', 'locked': '947415'}
],
'totalAsset': '152'
},
'type': 'spot',
'updateTime': 1703807999000
}
]
}
# 用于存储最终结果的列表
filtered_balances_data = []
# 1. 遍历 'snapshotVos' 列表
for snapshot_entry in repo.get('snapshotVos', []):
# 2. 从每个 snapshot_entry 中获取 'data' 字典
# 使用 .get() 方法可以避免键不存在时引发 KeyError
data_entry = snapshot_entry.get('data', {})
# 3. 从 'data_entry' 中获取 'balances' 列表
balances_list = data_entry.get('balances', [])
# 4. 遍历 'balances' 列表中的每一个资产字典
for balance_item in balances_list:
# 5. 获取 'free' 和 'locked' 的值,同样使用 .get() 确保健壮性
# 默认值设为 '0' 以便进行后续的条件判断,即使键缺失
free_value = balance_item.get('free', '0')
locked_value = balance_item.get('locked', '0')
# 6. 应用过滤条件:如果 'free' 和 'locked' 都不是 '0',则保留
# 或者说,如果不是两者都为 '0',则保留
if not (free_value == '0' and locked_value == '0'):
# 7. 提取所需的 'asset', 'free', 'locked' 字段
extracted_item = {
'asset': balance_item.get('asset'),
'free': free_value,
'locked': locked_value
}
# 8. 将提取出的字典添加到结果列表中
filtered_balances_data.append(extracted_item)
# 打印最终结果
print(filtered_balances_data)代码解析与注意事项
dict.get(key, default_value) 的使用: 在代码中,我们大量使用了字典的 get() 方法(例如 repo.get('snapshotVos', []))。这是一个非常重要的最佳实践,它允许你在尝试访问字典中可能不存在的键时,提供一个默认值(例如空列表 [] 或空字典 {}),而不是直接引发 KeyError 异常,从而增强了代码的健壮性。
嵌套循环: 由于数据是多层嵌套的,我们需要使用嵌套的 for 循环来逐层深入。外层循环遍历 snapshotVos 列表,内层循环则遍历每个 snapshot_entry 中的 balances 列表。
条件判断与过滤: 过滤逻辑 if not (free_value == '0' and locked_value == '0'): 精确地实现了需求。它排除了那些 free 和 locked 字段值都为字符串 '0' 的条目。请注意,这里是字符串 '0' 的比较,如果数据类型是数字,则应转换为 int(free_value) == 0 进行比较。
数据类型一致性: 在进行条件判断时,务必注意数据类型。本例中 free 和 locked 的值是字符串 '0',因此比较时也使用字符串。如果它们是整数,则需要先进行类型转换,例如 int(free_value)。
结果结构: 最终的结果 filtered_balances_data 是一个列表,其中每个元素都是一个字典,只包含 asset、free 和 locked 这三个键值对,这符合了“需要键”的要求。
运行结果
执行上述代码,将得到以下输出:
[{'asset': 'ADD', 'free': '10', 'locked': '0'}, {'asset': 'SHIB', 'free': '0', 'locked': '947415'}]可以看到,{'asset': 'RDP', 'free': '0', 'locked': '0'} 这个条目因为满足过滤条件而被成功移除。
总结
通过本教程,我们学习了如何在Python中处理复杂的嵌套字典和列表结构。掌握 dict.get() 方法、嵌套循环以及精确的条件判断是高效数据提取和过滤的关键。在实际开发中,这些技术能够帮助我们从海量数据中筛选出有价值的信息,为后续的数据分析和业务逻辑处理打下坚实的基础。记住,代码的健壮性和可读性同样重要,合理使用 get() 方法和清晰的变量命名能够显著提升代码质量。
以上就是Python中处理嵌套字典与列表的数据提取与过滤教程的详细内容,更多请关注其它相关文章!
# 键值
# 重庆九龙坡网站推广公司
# 推广套餐营销策略分析报告
# 跨境推广营销服务商排名
# 怎么搭建seo网站
# 动态网站建设实例分享
# 舟山网站营销策划推广
# 甘肃关键词优化seo
# 黄石推广网站有哪些公司
# 新兴网站优化服务
# 粽子的网络营销推广
# 不存在
# 列表中
# python
# 转换为
# 这三个
# 所需
# 都为
# 遍历
# 数据结构
# red
# 键值对
# 配置文件
# app
# json
# js
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
AO3中文官网链接_AO3网页版稳定镜像站
如何在Python中使用Optional类型处理可变对象并避免Pylint警告
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
蛙漫2台版漫画地址 Manwa2正版网页版链接
mc.js免安装版 mc.js一键畅玩入口
J*aScript:在map操作中高效处理空数组
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
C++如何解决segmentation fault_C++段错误调试与原因分析
如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率
顺丰快递查单号物流信息 顺丰快递小程序查询入口
基于动态规划的房屋花卉种植最小成本算法详解
大麦的“候补”是什么意思 大麦候补购票规则【详解】
vivo云服务网页版登录 怎么登录vivo云服务网页版
LINUX的perf命令入门_LINUX官方性能分析工具的使用与解读
解决 MongoDB 聚合查询中对象数组 _id 匹配问题
Angular中单选按钮的正确使用与常见陷阱解析
J*aScript DOM操作:高效清空列表元素的策略与实践
win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】
高德地图怎么看全景照片_高德地图全景照片浏览教程
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
12306选座如何查看座位示意图_12306座位示意图解读与使用
使用Pandas转换并合并DataFrame:多列映射至统一结构
C++如何实现单例模式_C++设计模式之线程安全的单例写法
Golang如何使用const iota_Go iota常量计数器讲解
反效果?《战地6》免费试玩开启后玩家数不升反降
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤
微信网页版官方快速登录入口 微信网页版网页版账号直达
Shopware订单对象中获取产品自定义字段的正确方法
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能
特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相
俄罗斯Yandex搜索引擎入口_Yandex官网免登录一键访问
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
Web Components中自定义开关组件状态同步的常见陷阱与解决方案
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
如何在 Excel Online 和 Google 表格中更改日期格式
如何将HTML表格多行数据保存到Google Sheets
Bing引擎入口最新2025 Bing搜索免费官方登录
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
Typer应用中灵活处理命令行参数的令牌化与解析
Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】
在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案
解决Python单元测试中Mock异常方法调用计数为零的问题
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
Yandex浏览器官方网页版入口 Yandex浏览器最新版官网


2025-11-29
浏览次数:次
返回列表