Python递归生成树形结构数据

如何使用Python的Pyecharts制作漂亮的Tree 树图? Pyecharts是一个基于Echarts的Python数据可视化库,可以很容易地生成各种漂亮的图表。本文介绍如何使用Pyecharts绘制Tree树图。 阅读详情

需求: 前端Tree组件数据源需要结构型数据
在这里插入图片描述
在这里插入图片描述

第一步,构造源数据

根据需求, 源数据格式为一维数组, 元素为字典数据, 字典包含的元素包括标题(title)、唯一标识(key)、父节点唯一标识(parent_key)、是否为叶子节点(leaf), 考虑到实际业务数据不同, 这里数据源的构造需要根据自己实际情况构造, 本文只提供示例数据…

arr = [
    {'key': '0-0', 'title': '0-0', 'parent_key': '0', 'leaf': False},
    {'key': '0-1', 'title': '0-1', 'parent_key': '0', 'leaf': False},
    {'key': '0-0-0', 'title': '0-0-0', 'parent_key': '0-0', 'leaf': False},
    {'key': '0-1-0', 'title': '0-1-0', 'parent_key': '0-1', 'leaf': True},
    {'key': '0-0-1', 'title': '0-0-1', 'parent_key': '0-0', 'leaf': True},
    {'key': '0-1-1', 'title': '0-1-1', 'parent_key': '0-1', 'leaf': True},
    {'key': '0-0-0-0', 'title': '0-0-0-0', 'parent_key': '0-0-0', 'leaf': True}
]

第二步, 使用递归完成子节点装配, 获取树形结构数据

def arr2tree(source, parent):
    tree = []
    for item in source:
        if item["parent_key"] == parent:
            if not item['leaf']:
                item["children"] = arr2tree(source, item["key"])
            tree.append(item)
    return tree

完整代码

import json

arr = [
    {'key': '0-0', 'title': '0-0', 'parent_key': '0', 'leaf': False},
    {'key': '0-1', 'title': '0-1', 'parent_key': '0', 'leaf': False},
    {'key': '0-0-0', 'title': '0-0-0', 'parent_key': '0-0', 'leaf': False},
    {'key': '0-1-0', 'title': '0-1-0', 'parent_key': '0-1', 'leaf': True},
    {'key': '0-0-1', 'title': '0-0-1', 'parent_key': '0-0', 'leaf': True},
    {'key': '0-1-1', 'title': '0-1-1', 'parent_key': '0-1', 'leaf': True},
    {'key': '0-0-0-0', 'title': '0-0-0-0', 'parent_key': '0-0-0', 'leaf': True}
]


def arr2tree(source, parent):
    tree = []
    for item in source:
        if item["parent_key"] == parent:
            if not item['leaf']:
                item["children"] = arr2tree(source, item["key"])
            tree.append(item)
    return tree


if __name__ == '__main__':
    result = arr2tree(arr, '0')
    print(json.dumps(result))

实现效果

在这里插入图片描述

Python中yield与递归:深度优先搜索的奇妙工具 而对于一个生成器函数而言,当执行到一个yield语句时,该函数的执行将被挂起,当前代码环境的状态被保存下来以便后续恢复执行,同时yield语句也会返回一个值给调用方。在depth_first_search()函数中,我们通过递归调用来遍历图形数据,并使用列表path来记录从起点到当前节点的路径。在generator函数中,我们使用yield语句来暂停遍历树形结构的过程,并将当前节点的值返回给调用方。当然,在递归遍历左右子树的过程中,也同样需要使用yield语句来暂停当前的遍历。 阅读详情

相关推荐

HWSD全球土壤数据下载处理

下载地址: http://www.fao.org/soils-portal/soil-survey/soil-maps-and-databases/harmonized-world-soil-database-v12/en/

江北20190411的博客 3万+

python将列表数据转换成树结构数据

将list数据转成dict格式的树结构 测试数据: test_data = [ {'id': 1, 'parent_id': 0, 'name': '学校'}, {'id': 2, 'parent_id': 1, 'name': 'A校区'}, {'id': 3, 'parent_id': 1, 'name': 'B校区'}, {'id': 4, 'parent_id': 1, 'name': 'C校区'}, {'id': 5, 'parent_id': 2, 'na

qq_32945487的博客 3665

用deepseek对GPU服务器进行压力测试

利用 DeepSeek 模型对 GPU 服务器进行压力测试,核心思路是通过,验证 GPU 服务器在计算、显存、网络等维度的承载能力,同时观察稳定性与性能瓶颈。

weixin_42795092的博客 1609

Python递归树结构,回溯法深度优先、广度优先详解,代码实现

Python实现,递归算法 其实递归说白了就是循环本身函数,只不过下次循环的输入值是上次循环的结果值。关于递归算法,我经常把它用在搜索、计算中。我们来看一个简单的例子: 计算Demo '要实现1,3,7,15,31''有如下数列,请问第7位是多少 --> 127 ' #普通写法 def simple(time): '''如上可以看出规则为 1 * 2 + 1 ''' '''此时如果硬写代码会比较繁琐,''' time -= 1 for i in range(time):

扶摇直上 2394

Ubuntu本地部署CodeX编程助手:CLI配置全指南

本地AI编程助手是当前开发者关注的核心技术趋势,指在不依赖云端API、保障代码隐私前提下,于本地环境运行具备代码理解、多语言补全与知识库检索能力的智能辅助工具。其技术原理涉及模型加载、API网关编排、向量数据库集成及系统级资源调度,关键价值在于可控性、低延迟与合规性。典型应用场景包括企业内网DevOps提效、边缘设备嵌入式开发支持,以及敏感代码场景下的离线编程增强。本文聚焦Ubuntu系统下基于CLI的手动配置路径,深入解析Ollama服务注册、Node.js版本锁定、API Key环境隔离及Qwen2.5

weixin_26804345的博客 593

ABAP Module Pool 编程入门:把 Table Control 用透,在 Dynpro 里做出可编辑的列表界面

摘要:Table Control是SAP GUI中用于对话式事务的多行数据交互控件,具备滚动、选择、修改等功能。它通过CXTAB_CONTROL/CXTAB_COLUMN结构实现动态控制,需在PBO/PAI中配合LOOP循环处理数据流。开发时需注意LINES、TOP_LINE等关键字段设置,并采用并行循环简化编码。典型应用包括订单行维护、主数据管理等场景,支持多选删除、列排序等业务需求。(150字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

python生成树结构

# 生成树结构 def get_trees(data, key_column='elementId', parent_column='parentId', child_column='children'): """ :param data: 数据列表 :param key_column: 主键字段,默认id :param parent_column: 父ID字段名,父ID默认从0开始 .

唐僧不爱八戒 2191

基于Simulink的四足机器人关节力矩优化仿真建模示例

高自由度:每个腿至少有3个自由度(DOF),增加了控制的复杂性。非线性动力学:涉及多体系统的相互作用,包括接触力、摩擦力等。能量消耗:减少不必要的能量消耗是提升续航能力和效率的关键。可以是最小化能量消耗或最大化稳定性等。matlab深色版本% 示例代码通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的关节力矩优化模型,并进行了仿真以验证其基本功能。

amy_mhd的博客 171

项目中将普通数据转换成 el-tree 中的 tree结构

项目中将普通数据转换成 el-tree 中的 tree结构

weixin_67254784的博客 431

【硬件工程师面经整理18_Smith圆图】

若文中任何内容侵犯了您的合法权益,请相关权益人及时与我联系,我将立即进行核实并采取适当措施,包括但不限于删除相关内容或更新文章以消除影响。**在Smith圆图上,源阻抗表示为圆心,而负载阻抗表示为圆图上的一个点。具体来说,通过将负载阻抗在Smith圆图上移动到特定位置,使其与传输线特性阻抗形成纯电阻或纯电抗的组合,从而实现匹配。例如,反射系数表示为Smith圆图上的一个点,而驻波比则表示为圆图上两个点之间的距离。Smith圆图是用于阻抗匹配和网络分析的工具,它是一种将复阻抗表示为坐标的图形。

LeeYLong的博客 651

[23]-->变长SPI接口

然而,FPGA技术复杂,学习门槛较高,许多人(初学者或学生)在学习过程中面临诸多挑战。(1)模式0:SCK串行时钟线空闲是为低电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 0,CPHA=0;(2)模式1:SCK串行时钟线空闲是为低电平,数据在SCK时钟的下降沿被采样,数据在SCK时钟的上升沿切换,CPOL= 0,CPHA=1;(3)模式3:SCK串行时钟线空闲是为高电平,数据在SCK时钟的上升沿被采样,数据在SCK时钟的下降沿切换,CPOL= 1,CPHA=1;

m0_46498597的博客 178

python递归生成式解包遍历嵌套列表

本博文源于python基础,主要探讨递归生成式的妙用。嵌套列表在python描述树形结构时经常用到,做到对嵌套列表遍历是一件存在方法技巧的事情,因此我们今天就来实现一二。

执念斩长河 989

纯方位观测下的三维定位,IV-PLKF(Inverse Velocity-Weighted Pseudo-Linear Kalman Filter)

在现代定位系统中,纯方位观测因其无需测距设备的优势,在无线通信、无人机导航和室内定位等领域备受关注。本文深入探讨基于算法的三维定位方法,并提供完整的MATLAB仿真例程。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 672

JS递归拼装树形结构的表格

数据格式: [{"id":2, "pid":1, "children":[{...},{...}]},{"id":3, "pid":1, "children":[{...},{...}]},.......]注意: 下面的样例数据没有children属性,children属性是在程序代码生成的,下面的样例数据只是简单的从数据库查,未做任何处理,如果实际中数据库查出来的就是树形结构的数据,js

水神 9037

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

树形结构的快速生成

相信大家都遇到过树形结构,像是文件列表、多级菜单、评论区的设计等等,我们都发现它有很多层级,第一级可以有多个,下边的每一个层级也可以有多个;有的可以设计成无限层级的,有的只能设计成两级。接手需求一样,上次接到了评论回复的需求,产品觉得两级回复和多级回复可以分成两期做,细心的我就发现这完全可以整成一个需求做呢。其实这里用到了递归的方式,先获得所有的第一级节点,然后根据第一层节点的id去匹配子级的id。,保存自己上一个节点的id,如果上一个节点的id(pid)是空的,OK,那它就是第一级别的。

shigen的博客 359

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python递归生成多叉树结构之treelib

Python 多叉树结构之treelib 官方文档和源码 https://treelib.readthedocs.io/en/latest/index.html https://github.com/caesar0301/treelib 一篇不错的博客 https://blog.youkuaiyun.com/weixin_43790276/article/details/108248298 The main features of treelib includes: Efficient operati

Logan 8764

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python list转换成树形结构_python递归查询菜单并转换成json实例

最近需要用python写一个菜单,折腾了两三天才搞定,现在记录在此,需要的朋友可以借鉴一下。备注:文章引用非可执行完整代码,仅仅摘录了关键部分的代码环境数据库:mysqlpython:3.6表结构CREATE TABLE `tb_menu` (`id` varchar(32) NOT NULL COMMENT '唯一标识',`menu_name` varchar(40) DEFAULT NULL ...

weixin_39973271的博客 202

python生成树状图_python如何把数据变成树状图

在Python语言中,可以利用自带的方法或第三方包,将数字或符号转换成图形。那么,python如何把数据变成树状图?工具/原料Pythonpycharm截图工具WPS方法/步骤1打开pycharm工具,新建Python文件;在文件中,定义函数show_tree,传入两个参数height和fuhao2对传入的height参数进行转换成int,初始化几个变量,以便后面使用3使用while语句判断,当高...

weixin_39760295的博客 2409

python树结构输出到excel_python将excel中父子关系生成树并写入新excel

Excel中的数据是按照工单号存储的,且存在如下关系:工单——母工单——上阶工单需要分析整理成 母工单——一阶工单——二阶工单……形式的树状关系图。思路:1、读取原始文件,转换成一个个工单的list,以及母工单的list2、以母工单为根节点,生成描述上下阶关系的树3、将树按照树的样子(不过不是从上到下,二是从左往右,左上角是根节点)写入excel代码如下:首先是树相关的类:# 节点类class N...

weixin_36276256的博客 1105

不用递归实现访问者模式

使用访问者模式遍历一个很深的嵌套树形数据结构,可能会因为超过嵌套层级限制而失败。 可以使用生成器可以在树遍历或搜索算法中消除递归。 import types class Node(object): pass class NodeVisitor(object): def visit(self, node): stack = [node] las...

Allen_by的博客 447

python生成无限级树形菜单json

python生成无限级树形菜单json models.py class Fl(models.Model): flxh = models.AutoField(u’分类序号’,primary_key=True) flmc = models.CharField(u’分类名称’,max_length=255) flbm = models.ForeignKey(“self”,verbose_name=u’上...

qq_28674145的博客 2191

使用python的xlrd模块解析excel的多级结构

使用xlrd解析excel的多级结构构建多叉树和结点结构由于要支持多级嵌套的表结构, 所以单纯的按照列的顺序来解析每行数据肯定达不到需求。所以约定Excel表头结构, 如果一个属性包含二级属性,则在该属性下新建一行表头,表明二级属性名称如下图所示:然后按照表头结构,构建一个多叉树,每行数据解析的时候遍历多叉树结构解析。首先构建多叉树和数的结点class node: def __init__(

ericwang_1992的博客 2371

python 根据文件路径生成zTree插件需要的数据格式

python生成前端目录树zTree插件需要的数据格式 一、首先准备数据 ll= ['/app/', '/nficd/test_app/htmlname.py', '/nficd/test_app/migrations/', '/nficd/test_app/migrations/models.py', '/nficd/test_app/migrations/sec_audit.log', '/nf

吃瓜的猫~ 437

递归遍历树形结构

该函数用于递归遍历节点结构(树状数据),提取所有最后一级节点(无子节点的节点)的keywords值。采用生成器(yield)实现迭代式数据提取,避免一次性加载所有数据占用内存,同时通过字典键的安全获取(get方法)处理缺失键,防止运行时错误。

互联网小毛贼 209

python如何将指定路径下的某类型文件,返回一个树形结构体,让前端显示为树形的目录结构...

最近遇到一个问题就是某个linux的目录下有各种文件现在的要求是只需要返回.kml格式的文件,并根据前端要求返回如下结构体即:[{'children': [{'children': [{'title': '2.kml'}], 'title': 'dir6'}, {'children': [{'title': '1.kml'}], 'title': 'dir5'}, {'children': [{'...

weixin_30719711的博客 401

python 生成复杂表格,自动分页等功能

首先,要解决“tree目录数据”和“Word表格互换”,指将树形结构的数据转换成Word表格,并在转换过程中合并相应的单元格以反映层次结构。希望将这些层次结构在Word表格中展示,通过合并单元格来表示父子关系,例如,一个父节点占据一行,其子节点在下方缩进显示,可能需要合并某些列来体现层级。可能需要为每个节点计算其在表格中的行数和列数,特别是当子节点存在时,父节点可能需要跨多行合并。例如,根节点可能需要合并所有列的一行,子节点可能只在第一列显示名称,后面的列合并或留空,或者根据具体需求调整。

fqfq123456的专栏 1031
上一篇: 解决: Python运行项目中单个文件时报错 ModuleNotFoundError
下一篇: Linux服务器发行版本查看
Noobovo
博客等级 码龄11年 57粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Noobovo

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值