
本文旨在指导读者如何在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
}
]
}为了实现目标,我们需要执行以下步骤:
以下是实现上述逻辑的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中处理嵌套字典与列表的数据提取与过滤教程的详细内容,更多请关注其它相关文章!
相关文章:
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
qq音乐在线播放入口_qq音乐电脑版登录链接
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
漫蛙漫画官方主页入口 漫蛙MANWA网页直达访问链接
win11怎么查看应用耗电情况 Win11电池设置查看应用能耗排行榜【优化】
优化Django表单:提交验证失败后保留用户输入
PHP:根据嵌套关联数组项值动态添加新键值对
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
CSS布局中意外空白:解决padding-top导致的顶部间距问题
C++如何跨平台操作文件和目录_C++17标准库std::filesystem的使用教程
哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
生成rdflib自定义SPARQL函数:参数匹配与实践指南
12306几点到几点不能订票? | 官方最新系统维护时间全解析
age动漫网站入口 age动漫官网直接访问入口
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
Python异步编程实践:使用Binance API构建实时交易数据流
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
利用Bokeh CustomJS动态控制DataTable列可见性
正确连接J*aScript到HTML实现可点击图片与自定义事件处理
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
汽水音乐在线版入口_汽水音乐网页播放手册
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
理解J*aScript Promise的微任务队列与执行顺序
外媒分析《GTA6》定价:卖100美元可以但真没必要!
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
c++ dfs和bfs代码 c++深度广度优先搜索算法
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
J*a初级项目如何接入API数据_第三方接口请求与响应解析
windows10怎么查看本机ip_windows10命令提示符ipconfig使用
精准捕获:如何在页面中监听除特定元素外的所有点击事件
React中useState与局部变量:理解组件状态管理与渲染机制
Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南
VS Code远程开发时如何处理文件权限问题
整合Supabase认证与Django模型:跨模式迁移的解决方案
c++如何使用Meson构建系统_c++比CMake更快的构建工具
知音漫客正版漫画平台_知音漫客官网账号登录
深入理解与实现最大堆的Heapify过程:常见错误与修正
微信网页版官方快速登录入口 微信网页版网页版账号直达
WooCommerce后台产品编辑页:获取分类ID并实现角色权限控制
CSS Box Model与弹性按钮:维持布局稳定的动画实践
C++如何实现一个智能指针_手动实现C++ shared_ptr的引用计数功能