Python 实现无限级分类树状结构生成算法与缓存优化

小鹿同学
小鹿同学
发布时间:2026-10-14| 4人浏览过
原创

本文介绍如何使用 Python 生成无限级分类的树状结构。通过递归算法处理数据库中的 parent 字段,构建层级关系。针对递归可能带来的性能问题,引入缓存机制优化执行效率,避免重复计算。文章包含完整代码示例及优化前后的逻辑对比,适用于权限管理、栏目分级等场景。

后端开发人员通常对无限级分类的处理印象深刻,这往往需要投入较多时间进行设计与实现。

无限级分类树状结构在实际应用中十分广泛。例如,后端需要从数据库中读取用户权限数据并生成树状结构,前端获取该权限树后,即可依据层级展示用户有权访问的栏目。此外,网站栏目的多级分类也是典型应用场景。

初次面对树状结构生成需求时,往往令人感到棘手。经过探索,发现一种代码简洁且逻辑清晰的解决方案:递归算法。

首先,需确保数据库中存储的类别信息符合特定格式。


[
 {"id": 1, "name": '电器', "parent": 0},
 {"id": 2, "name": '水果', "parent": 0},
 {"id": 3, "name": '家用电器', "parent": 1},
 {"id": 4, "name": '电吹风', "parent": 3},
 {"id": 5, "name": '电风扇', "parent": 3},
 {"id": 6, "name": '台灯', "parent": 3},
 {"id": 7, "name": '商用电器', "parent": 1},
 {"id": 8, "name": '大型电热锅', "parent": 7},
]

数据表中通过 parent 字段记录当前条目的父级编号。例如,电吹风的 parent 为 3,表示其属于家用电器;而家用电器的 parent 为 1,表示其属于电器类产品。虽然电吹风与电器之间没有直接的标识关联,但需要通过树状结构明确展示“电器 <- 家用电器 <- 电吹风”的层级关系。

通过 parent 字段追溯父级编号并建立关联的过程是循环往复的,直至遍历所有节点。这一过程与递归算法的特性高度契合,因此可以较为轻松地编写出对应的递归代码。


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 相关技术内容,可搜索本站往期文章或浏览后续内容,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。