0

0

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

碧海醫心

碧海醫心

发布时间:2025-11-29 12:34:47

|

848人浏览过

|

来源于php中文网

原创

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代码:

立即学习Python免费学习笔记(深入)”;

Heeyo
Heeyo

Heeyo:AI儿童启蒙陪伴师,风靡于硅谷的儿童AI导师和玩伴

下载
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开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

767

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

661

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

639

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1305

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 7.6万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号