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


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
        }
    ]
}

数据提取与过滤的步骤

为了实现目标,我们需要执行以下步骤:

  1. 定位到目标列表: 首先,我们需要导航到 snapshotVos 列表,然后进入其每个元素的 data 字典,最后找到 balances 列表。
  2. 遍历目标列表: 对 balances 列表中的每一个字典元素进行迭代。
  3. 应用过滤条件: 在每次迭代中,检查当前字典元素的 free 和 locked 字段。如果两者都为 '0',则跳过该条目。
  4. 提取指定字段: 对于符合条件的条目,提取 asset、free 和 locked 这三个字段的值,并将其组织成一个新的字典。
  5. 收集结果: 将所有符合条件且已提取字段的新字典收集到一个新的列表中。

实现代码

以下是实现上述逻辑的Python代码:

Viggle AI Video Viggle AI Video

Powerful AI-powered animation tool and image-to-video AI generator.

Viggle AI Video 115 查看详情 Viggle AI Video
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)

代码解析与注意事项

  1. dict.get(key, default_value) 的使用: 在代码中,我们大量使用了字典的 get() 方法(例如 repo.get('snapshotVos', []))。这是一个非常重要的最佳实践,它允许你在尝试访问字典中可能不存在的键时,提供一个默认值(例如空列表 [] 或空字典 {}),而不是直接引发 KeyError 异常,从而增强了代码的健壮性。

  2. 嵌套循环: 由于数据是多层嵌套的,我们需要使用嵌套的 for 循环来逐层深入。外层循环遍历 snapshotVos 列表,内层循环则遍历每个 snapshot_entry 中的 balances 列表。

  3. 条件判断与过滤: 过滤逻辑 if not (free_value == '0' and locked_value == '0'): 精确地实现了需求。它排除了那些 free 和 locked 字段值都为字符串 '0' 的条目。请注意,这里是字符串 '0' 的比较,如果数据类型是数字,则应转换为 int(free_value) == 0 进行比较。

  4. 数据类型一致性: 在进行条件判断时,务必注意数据类型。本例中 free 和 locked 的值是字符串 '0',因此比较时也使用字符串。如果它们是整数,则需要先进行类型转换,例如 int(free_value)。

  5. 结果结构: 最终的结果 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网站优化软件  # 列表中  # 浮点  # python  # 这三个  # 所需  # 都为  # 遍历  # 数据结构  # AI-powered  # red  # 键值对  # 配置文件  # app  # json  # js 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Linux如何开发轻量级数据服务模块_Linux服务化设计  圆通快递官方入口不需要登录 在线查询入口快速查询  mysql如何限制远程访问_mysql远程访问限制方法  京东物流快递破损了怎么办_京东快递破损理赔流程  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  汽车之家网页版免费登录_汽车之家官网首页直接进入  XPath动态元素定位:如何精准选择文本内容变化的元素  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  《飞猪旅行》购买汽车票方法  智慧职教mooc平台登录网址 智慧职教mooc官网直达  研招网官方网站招生平台入口_中国研究生招生信息网官网登录  Win10如何关闭操作中心通知 Win10免打扰设置全攻略【清爽】  VS Code源代码管理(SCM)视图的进阶使用技巧  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  盲鳗善于分泌黏液猜猜主要用来做什么  《气泡星球》兑换码礼包大全  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  抖音视频如何添加标题?添加标题有哪些好处?  自定义你的VS Code状态栏,监控关键信息  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  鲁班大师乓乓皮肤获取方法  Excel宏怎么删除_Excel中删除宏的详细操作流程  企查查官网和爱企查 企查查企业查询官网入口  《王者荣耀世界》英雄获取攻略  Pydantic 中“schema”字段命名冲突的解决方案  windows10怎么开启卓越性能_windows10电源选项代码激活  J*aScript包管理器_Npm与Yarn对比  电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  顺丰快递怎么查物流_顺丰快递物流信息实时查询操作指南  C++如何实现单例模式_C++线程安全的单例模式写法  mysql如何管理数据库账户_mysql数据库账户管理技巧  C++如何使用CMake构建项目_C++ CMakeLists.txt编写入门教程  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  纯CSS实现自适应宽度与响应式布局的水平按钮组  sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧  Windows自带的便笺数据如何备份_防止数据丢失的便利贴迁移教程【干货】  realme 10 Pro息屏方案_realme 10 Pro省电策略  电脑没有声音了怎么办 电脑声音问题的全面排查与修复指南【详解】  免费占卜在线神算_免费占卜手机神算  WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程  《微信》视频号原创声明开启方法  美发店速赢秘籍  汽水音乐在线听歌网页版 汽水音乐在线听歌网页版入口  CSS如何使用outline-offset与颜色组合突出元素边框  J*a列表元素格式化输出教程  哔哩哔哩黑名单怎么查看 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.