从嵌套数据结构中提取并重构字典:Pythonic 方法实践

从嵌套数据结构中提取并重构字典:Pythonic 方法实践

本文将介绍如何高效地从包含字典列表的复杂嵌套数据结构中,提取特定的键值对并重构为一个新的字典。通过利用 Python 的字典推导式(Dictionary Comprehension),我们可以简洁而高效地完成这一数据转换任务,提升代码的可读性和执行效率,特别适用于处理API返回的结构化数据。

在实际开发中,我们经常需要处理来自外部服务(如api)的复杂数据。这些数据通常以嵌套的字典和列表形式呈现。例如,我们可能从经纪商api获取到以下格式的金融工具数据:

api_data = {    '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'}    ]}

上述 api_data 是一个字典,其键 ‘1’ 对应的值是一个包含多个字典的列表。每个内部字典都代表一个金融工具的详细信息。我们的目标是从这个复杂结构中提取出每个工具的 token 和 tsym 信息,并将其重构为一个新的字典,其中 token 作为新字典的键,tsym 作为新字典的值。期望的输出格式如下:

# 期望的新字典格式{    '43214': 'NIFTY07DEC23C20700',    '43218': 'NIFTY07DEC23P20700',    '43206': 'NIFTY07DEC23C20600',    '43207': 'NIFTY07DEC23P20600'}

使用字典推导式进行数据重构

Python 提供了强大的字典推导式(Dictionary Comprehension),能够以简洁高效的方式创建新字典。对于上述数据重构需求,字典推导式是理想的解决方案。

核心思想是遍历 api_data[‘1’] 列表中的每一个内部字典,然后从每个内部字典中提取 ‘token’ 和 ‘tsym’ 键对应的值,并将它们作为新字典的键和值。

# 原始数据api_data = {    '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'}    ]}# 使用字典推导式重构数据reconstructed_dict = {item['token']: item['tsym'] for item in api_data['1']}print(reconstructed_dict)

输出结果:

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

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

字典推导式解析

上述代码 reconstructed_dict = {item[‘token’]: item[‘tsym’] for item in api_data[‘1’]} 可以分解为以下几个部分理解:

for item in api_data[‘1’]: 这部分是迭代器,它会遍历 api_data 字典中键 ‘1’ 所对应的列表。在每一次迭代中,item 变量会依次绑定到列表中的每一个内部字典。item[‘token’]: item[‘tsym’]: 这部分定义了新字典的键值对。对于每一次迭代中的 item 字典,我们通过 item[‘token’] 获取其 token 键的值作为新字典的键,通过 item[‘tsym’] 获取其 tsym 键的值作为新字典的值。{…}: 外部的花括号表示正在创建一个新的字典。

这种方法不仅代码量少,而且执行效率高,是 Python 中处理此类数据转换的推荐方式。

注意事项与扩展

在实际应用中,处理从外部源获取的数据时,还需要考虑一些健壮性问题:

键不存在的情况: 如果 api_data[‘1’] 列表中的某个字典缺少 ‘token’ 或 ‘tsym’ 键,直接访问 item[‘token’] 或 item[‘tsym’] 将会引发 KeyError。为了避免这种情况,可以使用 dict.get() 方法提供一个默认值,或者在推导式中添加条件判断。

示例:使用 dict.get() 处理缺失键

api_data_with_missing_key = {    '1': [        {'exch': 'NFO', 'token': '43214', 'tsym': 'NIFTY07DEC23C20700'},        {'exch': 'NFO', 'tsym': 'NIFTY07DEC23P20700'}, # 缺少 'token'        {'exch': 'NFO', 'token': '43206'} # 缺少 'tsym'    ]}# 使用 .get() 方法,如果键不存在则返回 Nonereconstructed_dict_safe = {    item.get('token', 'MISSING_TOKEN'): item.get('tsym', 'MISSING_TSYM')    for item in api_data_with_missing_key['1']}print(reconstructed_dict_safe)# 输出可能为: {'43214': 'NIFTY07DEC23C20700', 'MISSING_TOKEN': 'NIFTY07DEC23P20700', '43206': 'MISSING_TSYM'}

示例:使用条件过滤

reconstructed_dict_filtered = {    item['token']: item['tsym']    for item in api_data_with_missing_key['1']    if 'token' in item and 'tsym' in item # 仅处理包含所需键的字典}print(reconstructed_dict_filtered)# 输出可能为: {'43214': 'NIFTY07DEC23C20700'}

键值冲突: 如果 token 值在原始列表中存在重复,那么在重构的新字典中,

以上就是从嵌套数据结构中提取并重构字典:Pythonic 方法实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1372942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月14日 12:45:35
下一篇 2025年12月14日 12:45:48

相关推荐

  • 解决Windows上“gdown”命令未识别错误:即使已安装并配置PATH

    本文针对Windows用户在使用gdown时遇到的“命令未识别”错误,即使已确认安装并配置了环境变量,提供了一个直接有效的解决方案。核心方法是定位到gdown可执行文件的实际路径,并使用相对路径或完整路径显式调用它,从而绕过系统PATH解析的潜在问题。 问题描述与常见误区 许多windows用户在尝…

    好文分享 2025年12月14日
    000
  • 使用 Pandas 高效处理多文件数据关联与提取

    本教程详细介绍了如何利用 Python 的 Pandas 库高效地处理多个文本文件中的数据关联与提取任务。通过将文件数据加载为 DataFrame,并运用 merge 操作进行数据关联,我们可以轻松实现复杂的数据查找逻辑,例如根据一个文件中的 IP 地址在第二个文件中查找对应的 MAC 地址,再根据…

    2025年12月14日
    000
  • Python字典数据筛选与重构:高效提取特定键值对

    本教程详细介绍了如何从Python的复杂嵌套字典结构中高效提取特定数据。通过一个来自API调用的实际案例,我们将学习如何利用字典推导式(Dictionary Comprehension)将一个列表中的多个字典转化为一个新的字典,其中特定字段(如’token’和’t…

    2025年12月14日
    000
  • Python变量类型判断:isinstance 的正确姿势

    在Python中,判断变量是否属于特定模型或类型时,常见的误区是使用type(variable) is ModelA。本文将深入解析为何这种方法在多数情况下会失败,并强调推荐使用isinstance(variable, ModelA)进行类型检查。通过实例代码,我们将展示isinstance的正确用…

    2025年12月14日
    000
  • Python中从嵌套字典列表高效提取与转换数据

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

    2025年12月14日
    000
  • Python中嵌套字典数据的高效过滤与转换

    本文详细介绍了如何从复杂的嵌套字典结构中提取特定键值对,并将其转换为一个新的、扁平化的字典。通过利用Python的字典推导式,教程展示了如何高效地将API返回的列表嵌套字典数据,重构为以特定字段(如token)为键,另一字段(如tsym)为值的目标字典,从而实现数据的精准筛选和格式化。 在处理从ap…

    2025年12月14日
    000
  • cx_Oracle参数化查询的调试与验证

    本文深入探讨了在cx_Oracle中调试SQL查询时如何理解参数绑定机制、验证实际发送的数据库请求,并解决常见的查询无结果问题。文章阐明了cx_Oracle通过绑定变量而非字符串插值来防止SQL注入,并提供了利用PYO_DEBUG_PACKETS环境变量检查网络数据包的方法,同时强调了执行curso…

    2025年12月14日
    000
  • 高效分组字典冗余条目:基于图论的相似性聚合教程

    本教程详细阐述了如何通过图论中的最大团算法,有效地将字典中具有相同成对相似性分数的冗余条目进行分组。面对大量数据项间的相似性计算结果,传统方法难以处理其冗余性并进行聚合。本文通过构建以相似性分数为边权值的图,并利用NetworkX库识别最大团,提供了一种优雅且高效的解决方案,将具有共同相似性的条目聚…

    2025年12月14日
    000
  • Aiogram 3 中从 URL 发送音频文件的教程

    本教程旨在解决 Aiogram 3 机器人开发中,从外部 URL 直接发送音频文件时遇到的 InputFile 抽象类错误。文章将详细阐述问题的根源,并提供两种高效且无需本地存储的解决方案:一是利用 InputMediaAudio 类,二是直接将 URL 字符串传递给 bot.send_audio …

    2025年12月14日
    000
  • 深度学习文本处理:XLNet编码TypeError及Tokenizer配置指南

    本文旨在解决在Kaggle等环境中进行XLNet文本编码时常见的TypeError: cannot unpack non-iterable NoneType object错误。该错误通常源于XLNet Tokenizer的缺失或未正确使用,导致编码函数返回None而非预期的张量。教程将详细阐述错误原…

    2025年12月14日
    000
  • 调试cx_Oracle查询:深入理解参数绑定与网络包分析

    本文将深入探讨在使用cx_Oracle执行SQL查询时,如何有效调试参数绑定过程并验证实际发送到数据库的查询内容。我们将澄清关于参数替换的常见误解,介绍如何利用PYO_DEBUG_PACKETS环境变量来监控网络流量,从而查看原始SQL语句和绑定参数,并强调获取查询结果的关键步骤及其他常见调试要点,…

    2025年12月14日
    000
  • 调试cx_Oracle查询:理解绑定变量与查看实际执行的SQL

    在使用cx_Oracle进行数据库操作时,理解绑定变量的工作机制至关重要。本文旨在阐明cx_Oracle如何通过绑定变量安全地执行参数化查询,而非字符串拼接,并提供一种有效的调试方法——利用PYO_DEBUG_PACKETS环境变量来查看实际发送到数据库服务器的低级别通信,从而验证查询的正确性。此外…

    2025年12月14日
    000
  • Windows环境下gdown命令识别异常的排查与解决

    在Windows终端中,即使已安装gdown并配置了环境变量PATH,用户仍可能遇到“gdown命令未识别”的错误。本文将提供一种直接有效的解决方案,指导用户通过定位gdown可执行文件所在目录并使用相对路径执行,从而规避系统PATH识别问题,确保gdown工具的正常运行。 问题现象分析 当用户在p…

    2025年12月14日
    000
  • Python中从复杂嵌套字典中提取并重构数据

    本教程详细介绍了如何利用Python的字典推导式(Dictionary Comprehension),高效地从嵌套字典结构中提取特定键值对,并将其重构为新的、扁平化的字典。通过一个实际的API数据示例,文章演示了如何将列表中的每个子字典的token和tsym字段转换为新字典的键和值,从而实现数据的精…

    2025年12月14日
    000
  • 解决Windows上’gdown’命令未识别问题:即使已安装并配置PATH

    本文旨在解决Windows系统下,即使已通过pip安装gdown并配置了环境变量PATH,仍出现“’gdown’不是内部或外部命令”的错误。核心解决方案是,用户需定位gdown的可执行文件所在目录,并在该目录下使用.gdown的明确路径方式执行命令,以绕过系统路径解析的潜在问…

    2025年12月14日
    000
  • 深入StackExchange API:解锁问题正文内容的秘诀

    在使用StackExchange API时,开发者常遇到默认响应仅包含问题标题而缺少详细正文的问题。本文将深入探讨如何通过巧妙运用API的filter=’withbody’参数,轻松获取问题的完整HTML格式正文内容,从而实现更全面的数据抓取和应用。 StackExchang…

    2025年12月14日 好文分享
    000
  • cx_Oracle:查看绑定参数后的SQL查询与调试技巧

    本文详细介绍了在cx_Oracle中调试SQL查询和验证参数绑定的方法。它阐明了cx_Oracle如何通过参数绑定安全地处理查询,而非字符串插值,从而有效防止SQL注入。同时,教程还提供了使用PYO_DEBUG_PACKETS%ignore_a_1%来查看底层通信包以确认实际发送到数据库的查询,并强…

    2025年12月14日
    000
  • Locust Helm部署中“任务未定义”错误排查:标签配置陷阱解析

    本教程旨在解决Locust性能测试工具在Helm Chart部署环境下出现“No tasks defined”错误的问题。当Locust脚本在本地运行正常,但在Kubernetes通过Helm部署后报错时,一个常见的陷阱是Helm配置中不当或遗漏的标签(tags)设置,这可能导致Locust无法识别…

    2025年12月14日
    000
  • 如何在一台电脑上安装多个 Python 解释器

    可通过安装多个Python版本并使用py启动器或pyenv管理,配合虚拟环境隔离依赖,实现多版本共存与项目适配。 在一台电脑上安装多个 Python 解释器非常常见,尤其在开发不同项目时,可能需要使用不同版本的 Python。以下是一些实用方法,帮助你在同一台机器上管理多个 Python 版本。 使…

    2025年12月14日
    000
  • 如何高效分组字典中具有相同相似度的冗余条目

    本文旨在解决字典条目间相似度计算中存在的冗余分组问题。通过将问题建模为图论中的“最大团问题”,并利用 networkx 库,我们可以根据不同的相似度分数构建多个图,然后在每个图中找到完全连接的节点集合(即团),从而优雅地将具有相同相似度的条目进行高效分组,避免了复杂的嵌套循环,并生成清晰的、按组聚合…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信