def generate_tree(source, parent):

tree = []

for item in source:

if item["parent"] == parent:

item["child"] = generate_tree(source, item["id"])

tree.append(item)

return tree

只需要将数据库中存储的信息传递给 generate_tree 函数即可。这段递归代码在往复循环的过程中通过 parent 来寻找子结点,找到子结点后将其添加到树中。完整代码如下:

import json

def generate_tree(source, parent):

tree = []

for item in source:

if item["parent"] == parent:

item["child"] = generate_tree(source, item["id"])

tree.append(item)

return tree

if __name__ == '__main__':

permission_source = [

{"id": 1, "name": '电器', "parent": 0},

{"id": 2, "name": '水果', "parent": 0},

{"id": 3, "name": '家用电器', "parent": 1},

{"id": 4, "name": '电吹风', "parent": 2},

{"id": 5, "name": '电风扇', "parent": 3},

{"id": 6, "name": '台灯', "parent": 3},

{"id": 7, "name": '商用电器', "parent": 1},

{"id": 8, "name": '大型电热锅', "parent": 7},

]

permission_tree = generate_tree(permission_source, 0)

print(json.dumps(permission_tree, ensure_ascii=False))

终端输出结果如下图所示:

使用缓存优化算法

递归算法中有很多重复的计算,这些计算不仅占用额外资源,还会降低函数执行效率,因此需要对递归进行优化。这里选用缓存优化法提升函数执行效率。

基本思路是每次找到结点关系后将此条目的编号添加到一个列表中缓存起来,代表此条目已找到结点关系。当往复循环执行函数时再次遇到此条目可以跳过。代码改动很简单,增加一个缓存列表和控制流语句即可:

def generate_tree(source, parent, cache=[]):

tree = []

for item in source:

if item["id"] in cache:

continue

if item["parent"] == parent:

cache.append(item["id"])

item["child"] = generate_tree(source, item["id"], cache)

tree.append(item)

return tree

至此,无限级分类树状结构生成算法完成。你学会了吗?

python 树状图代码_Python 无限级分类树状结构生成算法 「实用代码」相关推荐

  1. python饼状图教程_Python数据可视化:饼状图的实例讲解

    使用python实现论文里面的饼状图: 原图: python代码实现: # # 饼状图 # plot.figure(figsize=(8,8)) labels = [u'Canteen', u'Sup ...

  2. 下料问题的列生成算法,matlab代码,简单易懂

    下料问题的列生成算法,matlab代码,简单易懂 ID:18300606016240721绿兔叽

  3. python绘制饼状图图例_python matplotlib饼状图参数及用法解析

    这篇文章主要介绍了python matplotlib饼状图参数及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在python的matplo ...

  4. python饼状图顺时针_Python:饼状图 (二十七)

    饼状图 饼状图是一种常见的单变量图形,用于描绘分类变量级别的相对频率.饼图中的频率用圆形的扇区表示:角度或面积越大,该分类值就越常见. 遗憾的是,饼状图是一种应用场合很有限的图形类型,图形创建者很容易 ...

  5. python绘制饼状图 标题_Python使用matplotlib的pie函数绘制饼状图功能示例

    本文实例讲述了Python使用matplotlib的pie函数绘制饼状图功能.分享给大家供大家参考,具体如下: #coding=utf8 import matplotlib as mpl import ...

  6. 聚类树状图_聚集聚类和树状图-解释

    聚类树状图 Agglomerative Clustering is a type of hierarchical clustering algorithm. It is an unsupervised ...

  7. 树状选择框测试用例_分类树测试用例设计工具:CTE XL

    1.1工具安装 CTE XL是一款免费的分类树测试用例设计工具,安装过程很简单,下载好安装程序后,运行安装程序:如图 点击下一步: 点击下一步: 是否创建桌面按钮: 安装: 安装完成后,需要注册才能获 ...

  8. python绘制折线图保存_python如何画折线图

    python画折线图利用的是matplotlib.pyplot.plot的工具来绘制折线图,这里先给出一个段代码和结果图:# -*- coding: UTF-8 -*- import numpy as ...

  9. python人物代码_Python设计王者荣耀人物结构(64)*

    这个周末要做的是设计王者荣耀人物的人物结构,用python打印出英雄及其属性.今天是揭晓答案的时候. 王者荣耀人物繁多,虽分为六个大类,有的人物却会在不同的类别里重复出现.而人物的属性也有很多,在三个 ...

最新文章

  1. VS2015 解决方案 或者项目 卡 正在加载 的解决办法
  2. 制作一个状态栏中跑马灯效果_snapseed制作“照片中的照片”画中画效果的方法...
  3. 2012-02-14 貌似情人节
  4. Winform开发中另一种样式的OutLookBar工具条
  5. python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...
  6. jzoj4745-看电影【期望概率,数学】
  7. 【渝粤教育】广东开放大学 软件工程 形成性考核 (50)
  8. 即时通讯软件在企业里的应用及发展
  9. SQL基础E-R图画法(二)
  10. linux环境apache,php的安装目录
  11. jquery 语法基础
  12. Oracle服务的作用
  13. 【图像拼接】基于matlab Harris角点检测图像拼接【含Matlab源码 517期】
  14. 【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
  15. 2019字节跳动实习面试
  16. html基础dw,HTML基础DW使用教程
  17. python求极限中有算术平方根如何表达_Python求算数平方根和约数的方法汇总
  18. 缺氧游戏里能造出计算机吗,缺氧游戏氧气制造方法汇总 缺氧氧气如何制造
  19. 怎么合并多个excel表
  20. 图解推导爬楼梯(跳台阶)问题详细过程

热门文章

  1. 【深度学习之美】激活引入非线性,池化预防过拟合(入门系列之十二)
  2. halcon算子翻译——dev_set_window
  3. 在别人客户端上修改,来匹配测试自己的服务端
  4. 国内互联网企业奇妙招数
  5. java截取字符串函数
  6. 关于富士通 T5220服务器故障处理
  7. 追佛信道不如追求真理。。
  8. 8-13 主观下线和客观下线
  9. 9-12 原生安装4
  10. 12、图解横向扩容过程,如何超出扩容极限,以及如何提升容错性