0

0

Python中从嵌套字典列表高效提取与转换数据

DDD

DDD

发布时间:2025-09-21 10:30:01

|

431人浏览过

|

来源于php中文网

原创

Python中从嵌套字典列表高效提取与转换数据

本教程详细讲解如何从一个包含嵌套字典列表的复杂数据结构中,高效地提取特定键值对,并将其转换为一个新的扁平化字典。通过使用Python的字典推导式,我们将演示如何将原始数据中的token字段作为新字典的键,tsym字段作为新字典的值,从而实现数据的精准筛选与格式转换。

在处理来自api或其他数据源的复杂数据时,我们经常会遇到嵌套的字典和列表结构。这些结构虽然能够承载丰富的信息,但在需要特定格式的数据进行进一步分析或处理时,往往需要进行有效的提取和转换。本教程将以一个典型的场景为例,展示如何利用python的强大功能,特别是字典推导式,来简化这一过程。

原始数据结构分析

假设我们从经纪商API获取了以下交易数据:

my_dict = {
    '1': [
        {'exch': 'NFO', 'token': '43214', 'tsym': 'NIFTY07DEC23C20700', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20700 CE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'CE'},
        {'exch': 'NFO', 'token': '43218', 'tsym': 'NIFTY07DEC23P20700', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20700 PE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'PE'},
        {'exch': 'NFO', 'token': '43206', 'tsym': 'NIFTY07DEC23C20600', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20600 CE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'CE'},
        {'exch': 'NFO', 'token': '43207', 'tsym': 'NIFTY07DEC23P20600', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20600 PE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'PE'}
    ]
}

这个数据结构是一个字典,其唯一的键是字符串'1',对应的值是一个列表。这个列表中包含了多个字典,每个内层字典代表一个金融合约的详细信息。

目标数据格式

我们的目标是从这个复杂结构中提取出每个合约的token和tsym信息,并将其组织成一个新的字典,其中token作为键,tsym作为值。期望的输出格式如下:

new_dict = {
    '43214': 'NIFTY07DEC23C20700',
    '43218': 'NIFTY07DEC23P20700',
    '43206': 'NIFTY07DEC23C20600',
    '43207': 'NIFTY07DEC23P20600'
}

解决方案:使用字典推导式

Python的字典推导式(Dictionary Comprehension)提供了一种简洁高效的方式来创建字典。它允许我们在一行代码中遍历可迭代对象,并根据每个元素生成键值对。

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

针对上述问题,我们可以使用以下字典推导式:

dct = {d['token']: d['tsym'] for d in my_dict['1']}

让我们逐步解析这个表达式:

  1. my_dict['1']: 首先,我们通过键'1'访问my_dict中的列表。这个列表包含了所有需要处理的内层字典。
  2. for d in my_dict['1']: 这是一个标准的for循环语法,它会遍历my_dict['1']列表中的每一个元素。在每次迭代中,变量d将代表列表中的一个内层字典(例如,{'exch': 'NFO', 'token': '43214', ...})。
  3. d['token']: d['tsym']: 这是字典推导式生成新字典键值对的部分。对于每次迭代中的字典d,我们提取其'token'键对应的值作为新字典的键,并提取其'tsym'键对应的值作为新字典的值。

将上述代码应用于原始数据,即可得到我们期望的扁平化字典。

Mapify
Mapify

Mapify是由Xmind推出的AI思维导图生成工具,原名ChatMind

下载

完整代码示例:

my_dict = {
    '1': [
        {'exch': 'NFO', 'token': '43214', 'tsym': 'NIFTY07DEC23C20700', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20700 CE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'CE'},
        {'exch': 'NFO', 'token': '43218', 'tsym': 'NIFTY07DEC23P20700', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20700 PE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'PE'},
        {'exch': 'NFO', 'token': '43206', 'tsym': 'NIFTY07DEC23C20600', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20600 CE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'CE'},
        {'exch': 'NFO', 'token': '43207', 'tsym': 'NIFTY07DEC23P20600', 'weekly': 'W1', 'dname': 'NIFTY 07DEC23 20600 PE ', 'instname': 'OPTIDX', 'pp': '2', 'ls': '50', 'ti': '0.05', 'optt': 'PE'}
    ]
}

# 使用字典推导式进行数据转换
new_dict = {d['token']: d['tsym'] for d in my_dict['1']}

print(new_dict)

输出结果:

{'43214': 'NIFTY07DEC23C20700', '43218': 'NIFTY07DEC23P20700', '43206': 'NIFTY07DEC23C20600', '43207': 'NIFTY07DEC23P20600'}

注意事项

  1. 键的存在性检查: 在实际应用中,如果不能保证每个内层字典都包含'token'和'tsym'这两个键,直接访问可能会导致KeyError。为提高代码健壮性,可以加入条件判断或使用字典的get()方法:

    # 使用get()方法提供默认值,避免KeyError
    new_dict_safe = {d.get('token', 'UNKNOWN_TOKEN'): d.get('tsym', 'UNKNOWN_TSYM') 
                     for d in my_dict['1'] if 'token' in d and 'tsym' in d}
    
    # 或者,如果只希望处理包含这两个键的字典
    new_dict_filtered = {d['token']: d['tsym'] 
                         for d in my_dict['1'] if 'token' in d and 'tsym' in d}
  2. 数据结构深度: 本示例处理的是两层嵌套(字典中包含列表,列表中包含字典)。如果数据结构更深,例如字典中包含列表,列表中又包含字典,字典中还有列表,则需要更复杂的访问路径或多层嵌套的推导式,甚至递归函数

  3. 可读性与复杂性: 字典推导式非常简洁,但对于非常复杂的转换逻辑,过度使用推导式可能会降低代码的可读性。在这种情况下,传统的for循环结合条件判断可能会是更好的选择。

  4. 性能: 字典推导式通常比显式的for循环更高效,因为它在C语言级别实现,减少了Python解释器的开销。对于大规模数据处理,这是一个显著优势。

总结

通过本教程,我们学习了如何利用Python的字典推导式,从一个嵌套的字典列表中高效、简洁地提取并转换数据。这种方法不仅能够实现精准的数据筛选和格式转换,还能有效提升代码的执行效率和可读性。掌握字典推导式是Python数据处理中的一项核心技能,对于处理各种复杂数据结构都具有广泛的应用价值。在实际开发中,请务必考虑键的存在性、数据结构的复杂性以及代码的可读性,选择最合适的实现方式。

相关专题

更多
python开发工具
python开发工具

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

724

2023.06.15

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

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

628

2023.07.20

python能做什么
python能做什么

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

744

2023.07.25

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

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

617

2023.07.31

python教程
python教程

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

1236

2023.08.03

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

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

547

2023.08.04

python eval
python eval

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

575

2023.08.04

scratch和python区别
scratch和python区别

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

702

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

热门下载

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

精品课程

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

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

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

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