Python【递归】遍历嵌套字典

Python深度遍历嵌套字典:递归查找键值的实战方法 Python 开发中,接口返回的 JSON 与配置数据常以多层嵌套字典形式存在,取值时手工索引极易因层级缺失或列表夹层而报错。递归通过终止条件、规模缩小与自我调用三个要素,将任意深度的结构遍历简化为统一逻辑:遇到字典遍历键值,遇到列表逐个深入,实现深度遍历查找字典键对应的值。该方案能提升数据解析的健壮性,广泛应用于配置提取、接口字段校验、动态键名匹配等工程场景。掌握递归遍历嵌套字典的方法,可让复杂 JSON 数据的取值从逐层手写索引简化为一行调用,显著提高开发效率。 阅读详情

递归遍历嵌套字典(深度优先)

area = {
    '世界': {
        '中国': {
            '广东': {
                '佛山': {
                    '南海': {
                        '桂城': '我家'
                    }
                },
                '广州': {
                    '荔湾': None
                }
            },
            '香港': {
                '九龙': None
            }
        },
        '美国': {}
    }
}
def print_k(area, i=0):
    for k in area:
        print('----' * i, k, sep='')
        if isinstance(area[k], dict):
            print_k(area[k], i+1)
print_k(area)
打印结果
世界
----中国
--------广东
------------佛山
----------------南海
--------------------桂城
------------广州
----------------荔湾
--------香港
------------九龙
----美国

遍历收集指定节点

dt = {
    'collect': 'Apple',
    'next': {
        'other': 'nothing',
        'collect': 'Ball',
        'next': {
            'collect': 'Cat',
            'next': None
        }
    }
}
def collect(dt, ls=[]):
    for k in dt:
        if k == 'collect':
            ls.append(dt[k])
        elif k == 'next':
            if isinstance(dt[k], dict):
                return collect(dt[k], ls)
            else:
                return ls
print(collect(dt))
打印结果
[‘Apple’, ‘Ball’, ‘Cat’]

在嵌套字典各层中任意切换

area = {
    '中国': {
        '广东': {
            '佛山': {
                '南海': {
                    '桂城': {}
                }
            },
            '广州': {
                '荔湾': {}
            }
        },
        '香港': {}
    },
    '美国': {
        '纽约': {}
    }
}
# 储存已经进入的层数
current_area=[area]
# q为退出,b为返回上一层
def access(a):
    if a == 'q':
        quit('退出')
    elif a == 'b':
        if len(current_area) == 1:
            print('已经在第一层')
        else:
            current_area.pop()  # 入栈
# 进入下一层
while True:
    for i in enumerate(current_area[-1]):
        print(*i, sep='\t')
    a = input('')
    access(a)
    if a in current_area[-1]:
        current_area.append(current_area[-1][a])
    else:
        print('操作不合法')  # 出栈
Python深度遍历嵌套字典:从递归到显式栈的完整指南 在解析动态接口返回或配置文件时,嵌套字典是最常见的数据结构。传统链式get或直接下标取值,一旦中间层级出现缺失或值变为None,就会抛出异常,代码非常脆弱。深度遍历(Depth-First Search)通过递归或显式栈按目标键名搜索,不依赖固定路径,能有效应对结构不稳定的JSON数据。它适用于接口调试、配置兼容、日志字段提取等场景,无需重型框架,一个函数即可实现。本文从get链的局限性切入,详细讲解深度优先遍历的实现、路径查询支持、三个关键参数以及常见避坑清单,帮助开发者写出健壮的嵌套数据取值工具。 阅读详情

相关推荐

Python嵌套字典深度遍历:递归、迭代栈与生成器实现指南

处理复杂JSON数据时,如何高效遍历多层嵌套字典是Python开发中的常见需求,也是排查KeyError类问题的关键技能。深度优先搜索(DFS)作为核心原理,递归函数能直观地按层级查找键值,但受递归深度限制;迭代栈通过显式数据结构模拟调用栈,规避溢出风险;生成器则支持批量提取所有匹配值。结合哨兵对象处理None值、路径记录定位字段来源、循环引用防护等技巧,可从容应对配置中心、电商订单、爬虫解析等多级嵌套结构。本文从基础遍历概念切入,系统对比递归、迭代栈与生成器三种方案的适用边界,并给出带深度上限与自定义比较

weixin_33423874的博客 154

python递归实现循环遍历多层级字典

递归实现循环遍历多层级字典

奋斗的小小鱼 1895

Docker网络冲突?手把手教你解决Dify社区版无法访问172.18.0.0网段的问题

本文详细解析了在部署Dify社区版时,因Docker默认网段与局域网冲突导致无法访问172.18.0.0网段的问题。通过剖析Docker网络原理,提供了修改Docker守护进程默认地址池的根治方案,并介绍了在Compose文件中指定自定义网络等备选方法,帮助用户彻底解决网络冲突,保障服务稳定运行。

p8q9r0的博客 486

python 字典嵌套列表,列表嵌套字典,数字,字符递归排序、去空值和转请求参数和加密验证

由于设计项目不能全部展示,留作博客记录,DRY import hashlib from collections import OrderedDict import json # 使用MD5进行加密 def encodeByMD5(sign): md5 = hashlib.md5() md5.update(sign.encode(encoding='utf-8')) return md5.hexdigest() #检查列表中是否包含字典或列表 def checkList(or

梦想是要有的,万一实现了呢! 1385

3D Slicer中Auto3DSeg和TotalSegmentator等自动分割插件总是安装失败,怎么办?教你两招

TotalSegmentator, MONAI auto3Dseg,这些工具因分割器官多,准确性高,备受关注。同时,这些自动分割工具被集成在了3D slicer平台,非常方便临床医生做手术规划。详细了解这些工具看之前的教程👇-------- 简单概述 --------其中,MONAIAuto3DSeg扩展附带数十种针对特定临床用例的预训练分割模型,这些模型旨在快速运行,几分钟内即可在任何普通计算机上运行,无需 GPU,甚至在笔记本电脑上。

zzjlhlcd的博客 1699

AUTOSAR进阶图解==>AUTOSAR_SWS_ECUStateManager

AUTOSAR ECU State Manager 摘要 AUTOSAR ECU状态管理器(EcuM)是Classic Platform 4.4.0规范中的核心模块,负责管理ECU的整个生命周期,包括启动、运行、关机和睡眠等状态转换。EcuM通过协调各基础软件模块的初始化过程,确保系统可靠运行。 主要功能包括: 启动管理 - 控制从硬件初始化到应用运行的完整启动序列 状态转换 - 管理RUN/POST_RUN/SHUTDOWN等状态切换 唤醒验证 - 区分真实与虚假唤醒事件 关机序列 - 确保安全关机保存关

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2478

Python嵌套字典列表的递归遍历

混合遍历列表和字典中的值

XerCis的博客 7092

Claude Code 100个真实案例 - 用AI搭建LangChain多工具Agent(自主搜索+查询)

本案例展示如何使用 Claude Code 搭建一个 LangChain 多工具 Agent 系统。Agent 能够自主决定调用搜索引擎、数据库查询、天气查询、计算器等工具,像人类助手一样拆解问题并逐步解决。

yueyeguzhuo的专栏 560

python字典及嵌套遍历

python嵌套字典遍历

hanhongkai的博客 5126

物理信息神经网络(PINN)文献综述 —— 原理、严格推导与优化训练策略

本章系统阐述物理信息神经网络的理论基础、主要算法改进与训练策略。内容涵盖:PINN 的数学表述与残差构造;损失与梯度的逐步推导;训练困难(梯度消失/爆炸、损失幅度不平衡、频谱偏差、采样效率低等)的定量分析;四类核心解决方案(动态损失加权、梯度归一化与预条件化、自适应采样、分阶段/分域训练)的详细推导与实现要点;以及若干关键算法的伪代码与收敛性形式结论。所有涉及推导的步骤均按顺序展开,给出必要的数学依据与结论性陈述,可直接作为教学或参考章节使用。

u012133341的博客 423

Android Update Engine 分析(三四)OTA 签名都支持哪些算法?

写了几十篇还没涉及到 OTA 签名算法细节,OTA 讨论群也很少问这个,毕竟签名算法纯理论的问题,一旦实现好就极少需要改动,只需要进行一些配置,准备好签名的秘钥和证书就可以了。限于签名的算法理论太过于抽象,本篇不讨论签名算法细节,但会总结一些签名操作。以及 Android OTA 包支持的签名算法。本文主要分析 Update Engine 中支持的签名算法,以及这些算法的操作实现(不涉及原理部分),并总结签名和验签使用的 key。

洛奇看世界 716

python遍历字典方法总结

主要分为3大类: keys() 、values() 、items()方法一: 方法二:

有勇气的牛排博客 422

彻底解决JDK安装包点击后无反应

jdk双击无法安装,jdk双击没反应,jdk安装包双击后没反应。

renkai721的专栏 8939

python遍历多层级的字典递归_Python--递归函数实现:多维嵌套字典数据无限遍历...

原创:多层嵌套字典无限遍历,实现当value值以特殊字符$开头,并且等于某项值时,用随机函数替换该参数"""处理前的字典{'patient': {'avatarPic': '', 'facePic': '', 'busiInsurs': [], 'name': '$name', 'sex': '$sex', 'idNo': '$idNo','agebirthday': {'age': 7, 'is...

weixin_39677106的博客 1095

【原理图PCB专题】原理图图纸锁定/解锁与PCB文件加密方式

在工作中我们会遇到需要冻结原理图进行评审和加密图纸防止被他人盗用的需求。那么在OrCAD Capture中如何对图纸进行锁定与解锁,如何在Allegro中对PCB工程进行加密呢?

一点硬件 3257

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python嵌套字典遍历_Python--递归函数实现:多维嵌套字典数据无限遍历

原创:多层嵌套字典无限遍历,实现当value值以特殊字符$开头,并且等于某项值时,用随机函数替换该参数"""处理前的字典{'patient': {'avatarPic': '', 'facePic': '', 'busiInsurs': [], 'name': '$name', 'sex': '$sex', 'idNo': '$idNo','agebirthday': {'age': 7, 'is...

weixin_39547158的博客 1114

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python遍历多层级的字典递归_关于python之字典的嵌套,递归调用方法

一 字典的嵌套在机器学习实战决策树部分,生成决策树时用到了字典的嵌套。>>>s1={'no surface':{}}>>>s1['no surfacce'][0]='no'>>>s1{'no surface':{0:'no'}}>>>s2={'flipper':{}}>>>s2['flipper'][0]='...

weixin_39844267的博客 1351

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python--递归函数实现:多维嵌套字典数据无限遍历

原创:多层嵌套字典无限遍历,实现当value值以特殊字符$开头,并且等于某项值时,用随机函数替换该参数 """处理前的字典{'patient': {'avatarPic': '', 'facePic': '', 'busiInsurs': [], 'name': '$name', 'sex': '$sex', 'idNo': '$idNo', 'agebirthday': {'age'...

weixin_30379911的博客 1219

Python JSON数据遍历全解析:从基础字典操作到嵌套递归与高级查询

JSON作为一种轻量级的数据交换格式,在Web API、配置文件和网络通信中广泛应用。其核心原理是将结构化的文本数据映射为编程语言中的原生数据结构,在Python中通常表现为字典和列表。掌握JSON的高效处理技术,对于数据提取、转换和序列化等任务具有重要价值,尤其在数据分析、后端开发和自动化脚本等应用场景中。本文聚焦于Python中JSON数据的键值对遍历,深入探讨了使用递归算法处理嵌套结构、利用栈实现迭代遍历,并通过JMESPath进行声明式查询等实用技巧,帮助开发者应对复杂JSON数据的处理挑战。

weixin_34364071的博客 337

python嵌套字典的递归遍历

如下:

LT921002191的博客 8863

python 遍历嵌套字典

遍历嵌套字典的方法有多种,下面是一种通用的方法: def print_nested_dict(d, indent=0): for key, value in d.items(): print(' ' * indent + str(key)) if isinstance(value, dict): print_nested_dict(v...

weixin_35754962的博客 953

[work] python嵌套字典的递归遍历

  输出如下:

This is bill的专属博客 3240

Python嵌套字典的遍历

对于字典:d = {1:1, 2:2, 3:{4:44, 5:55, 6:{7:{7:1024}, 8:88}}, 9:9 } 1.如何获取到{7:1024}中的1024? 2.如何获取到所有key为7的value值? 方法一: 直接输出 d = {1:1, 2:2, 3:{4:44, 5:55, 6:{7:{7:1024}, 8:88}}, 9:9 } print("{7:1024}中的102...

Tw_light的博客 5215

Python遍历无限嵌套的字典和列表

Python遍历无限嵌套的字典和列表Python遍历无限嵌套的字典和列表遍历字典遍历列表 Python遍历无限嵌套的字典和列表 思想是通过通过使用递归方法 遍历字典 def dicts(dc): if isinstance(dc, dict): #判定dc是否是字典 tem_key = dc.keys() for i in list(tem_key): print(i + ':' + str(dc.get(i))) di

qq_28472741的博客 755

python遍历多层级的字典递归_Python多层嵌套list的递归处理方法(推荐)

#!/usr/bin/env python# -*- coding: utf-8 -*-def unilist(ll):"""功能:用递归方法删除多层列表中重复元素"""result = [] for i in ll:if isinstance(i, list):if unilist(i) not in result:result.append(unilist(i))else:if i not ...

weixin_39941732的博客 1506

python字典嵌套字典遍历_遍历/迭代任意深度的嵌套字典(字典表示目录树)

我意识到这是一个老问题,但我只是在寻找一个简单,干净的方式来走嵌套的听写,这是最近的事情,我有限的搜索已经想出。如果你想要的不仅仅是文件名,那么oadams的答案还不够有用,spicavigo的答案看起来很复杂。最后我只滚动了自己的文件,其行为类似于os.walk处理目录的方式,只是它返回了所有键/值信息。它返回一个迭代器,对于嵌套dict的“树”中的每个目录,迭代器返回(路径、子dict、值),...

weixin_39747755的博客 618
上一篇: Python计时器
下一篇: 统计Python常用英文单词
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值