Python 无限级分类树状结构生成算法的实现

Python 无限级分类树状结构生成算法的实现

算法介绍

Python 无限级分类树状结构生成算法用于将任意多层级别的数据转化为树状结构,方便数据的展示和处理。该算法通过递归的方式实现,可以适用于各种类型的分类数据,如商品分类、学科分类等。

算法实现步骤

  1. 准备原始数据

数据格式需要满足以下要求:

  • 每一条数据至少包含一个唯一标识符和一个分类名称;
  • 如果数据有层级关系,需要在每一条数据中包含一个字段来表示该条数据所属的父级分类的唯一标识符。

示例数据如下:

[
{"id": 1, "name": "电视", "parent_id": 0},
{"id": 2, "name": "冰箱", "parent_id": 0},
{"id": 3, "name": "海尔", "parent_id": 2},
{"id": 4, "name": "西门子", "parent_id": 2},
{"id": 5, "name": "小明", "parent_id": 3},
{"id": 6, "name": "小红", "parent_id": 3},
{"id": 7, "name": "小丽", "parent_id": 4},
{"id": 8, "name": "小刚", "parent_id": 4}
]
  1. 实现递归函数

该算法是通过递归函数实现的,需要实现一个函数,该函数接收两个参数:原始数据列表和当前父级分类的唯一标识符。该函数的作用是返回当前父级分类的所有子级分类,以及子级分类的子级分类。

  1. 实现子级分类获取函数

在递归函数中,需要实现一个子级分类获取函数,该函数接收两个参数:原始数据列表和当前父级分类的唯一标识符。该函数的作用是返回当前父级分类的所有子级分类。

  1. 实现递归输出函数

在递归函数中,需要实现一个递归输出函数,该函数接收三个参数:原始数据列表、当前父级分类的唯一标识符和当前输出的缩进量。该函数的作用是递归输出当前父级分类的子级分类,并添加适当的缩进。

示例说明

以商品分类为例,假设有以下数据:

[
{"id": 1, "name": "电视", "parent_id": 0},
{"id": 2, "name": "冰箱", "parent_id": 0},
{"id": 3, "name": "海尔", "parent_id": 2},
{"id": 4, "name": "西门子", "parent_id": 2},
{"id": 5, "name": "小明", "parent_id": 3},
{"id": 6, "name": "小红", "parent_id": 3},
{"id": 7, "name": "小丽", "parent_id": 4},
{"id": 8, "name": "小刚", "parent_id": 4}
]

要生成该数据的树状结构,只需调用如下代码:

def recursive_tree(data, parent_id):
    result = []
    for item in get_children(data, parent_id):
        item["children"] = recursive_tree(data, item["id"])
        result.append(item)
    return result

def get_children(data, parent_id):
    return [item for item in data if item["parent_id"] == parent_id]

data = [
    {"id": 1, "name": "电视", "parent_id": 0},
    {"id": 2, "name": "冰箱", "parent_id": 0},
    {"id": 3, "name": "海尔", "parent_id": 2},
    {"id": 4, "name": "西门子", "parent_id": 2},
    {"id": 5, "name": "小明", "parent_id": 3},
    {"id": 6, "name": "小红", "parent_id": 3},
    {"id": 7, "name": "小丽", "parent_id": 4},
    {"id": 8, "name": "小刚", "parent_id": 4}
]

result = recursive_tree(data, 0)
print(result)

运行结果如下:

[
    {
        "id": 1,
        "name": "电视",
        "parent_id": 0,
        "children": []
    },
    {
        "id": 2,
        "name": "冰箱",
        "parent_id": 0,
        "children": [
            {
                "id": 3,
                "name": "海尔",
                "parent_id": 2,
                "children": [
                    {
                        "id": 5,
                        "name": "小明",
                        "parent_id": 3,
                        "children": []
                    },
                    {
                        "id": 6,
                        "name": "小红",
                        "parent_id": 3,
                        "children": []
                    }
                ]
            },
            {
                "id": 4,
                "name": "西门子",
                "parent_id": 2,
                "children": [
                    {
                        "id": 7,
                        "name": "小丽",
                        "parent_id": 4,
                        "children": []
                    },
                    {
                        "id": 8,
                        "name": "小刚",
                        "parent_id": 4,
                        "children": []
                    }
                ]
            }
        ]
    }
]

可以看到,该算法成功地将原始数据转换为了树状结构。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 无限级分类树状结构生成算法的实现 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android开发之activity的生命周期详解

    Android开发之activity的生命周期详解 在Android开发过程中,Activity是一个非常重要的组件,掌握Activity的生命周期,能够更好的开发高质量的Android应用程序。本文将深入介绍Activity的生命周期,包括常见的生命周期回调方法和示例。 Activity的生命周期 Activity的生命周期是指Activity从被创建到被…

    other 2023年6月27日
    00
  • 手机关机和重启有什么区别?手机关机和重启区别详解

    手机关机和重启有什么区别? 1. 手机关机 手机关机是指将手机电源完全关闭,此时手机内部所有应用和系统都将停止运行。与此同时,手机外部的所有功能,如通信,闹钟,日历等都将无法使用。手机的内存,CPU等硬件也将处于关闭状态,仅保持待机状态的少量硬件仍在运行。关机后,手机除非重新开机,否则就一直处于关闭状态。 示例说明1: 小明正在看电影,他不想被其他人干扰,所…

    other 2023年6月26日
    00
  • Python中实现输入超时及如何通过变量获取变量名

    Python中实现输入超时及如何通过变量获取变量名 在Python中,我们可以使用input()函数来获取用户的输入。然而,有时候我们可能希望在用户没有输入时,能够自动超时退出,或者我们需要获取用户输入的同时获取输入的变量名。下面将详细讲解如何实现这两个功能。 实现输入超时 要实现输入超时,我们可以使用signal模块来设置一个定时器,当定时器超时时,我们可…

    other 2023年8月8日
    00
  • notepad++:正则表达式系统教程

    以下是详细讲解“notepad++:正则表达式系统教程的完整攻略”的标准Markdown格式文本,包含两个示例说明: Notepad++:正则表达式系统程的完整攻略 Notepad++是一款免费的文本编辑器,支持正则表达式搜索和替换。本攻略将介绍Notepad++中正则表达式的基本语法、常用元字符和示例说明等内容。 基本语法 Notepad++中正则表达式的…

    other 2023年5月10日
    00
  • Win11系统任务栏停止工作的解决方法

    Win11系统任务栏停止工作的解决方法 问题描述 Win11系统的任务栏是操作系统的一个核心组件,在使用过程中如果任务栏突然停止工作,将会严重影响用户的正常操作。此时,需要及时采取措施来解决任务栏停止工作的问题。 解决方法 1. 重启Windows Explorer Windows Explorer 是Win11系统的文件管理器,任务栏也是由Windows …

    other 2023年6月25日
    00
  • Java基础之不简单的数组

    Java基础之不简单的数组:完整攻略 1. 数组的定义 Java中的数组是一种数据结构,用于存储相同类型的数据。数组定义时需要指定数据类型和长度,数组长度不能被改变。 // 定义int类型长度为3的数组 int[] nums = new int[3]; // 定义String类型长度为2的数组 String[] names = new String[2]; …

    other 2023年6月25日
    00
  • Mysql循环插入数据的实现

    以下是Mysql循环插入数据的实现的完整攻略: 创建一个存储过程:使用CREATE PROCEDURE语句创建一个存储过程,定义循环插入数据的逻辑。 DELIMITER // CREATE PROCEDURE insert_data() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 10 DO INSERT INT…

    other 2023年10月18日
    00
  • 安装Oracle时出现环境变量Path的值大于1023的解决办法

    在安装Oracle数据库时,有可能会碰到“环境变量Path的值大于1023”导致安装无法进行的问题。这通常是由于Windows系统环境变量过多导致的。下面是解决该问题的完整攻略: 打开系统环境变量设置在Windows系统中,“环境变量Path的值大于1023”的问题是由系统的环境变量引起的,因此需要进入系统环境变量进行相关设置。具体方法为:右键单击计算机图标…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部