首页 > 编程语言 >Python 数组类型转树形结构

Python 数组类型转树形结构

时间:2024-07-10 21:09:25浏览次数:13  
标签:notice name Python pid id 树形 数组 path children

今天突然想用到这个功能  结果百度到的  基本是写乱糟糟的一堆代码  无奈只好亲自操刀

话不多说,先上代码:

class Tools:

    @staticmethod
    def list_to_tree(data, pid=0):

        children = [item for item in data if item['pid'] == pid]
        for child in children:
            child['children'] = Tools.list_to_tree(data, child['id'])
        return children


tree = Tools.list_to_tree(data)
print(tree)

 

测试数据如下

data = [
            {
                "id": 1,
                "notice": "订单管理",
                "level": 1,
                "pid": 0,
                "path": "-1"
            },
            {
                "id": 2,
                "notice": "产品管理",
                "level": 1,
                "pid": 0,
                "path": "-2"
            },
            {
                "id": 3,
                "notice": "权限管理",
                "level": 1,
                "pid": 0,
                "path": "-3"
            },
            {
                "id": 4,
                "notice": "订单列表",
                "level": 2,
                "pid": 1,
                "path": "-1-4"
            },
            {
                "id": 5,
                "notice": "退款管理",
                "level": 2,
                "pid": 1,
                "path": "-1-5"
            },
            {
                "id": 6,
                "notice": "产品列表",
                "level": 2,
                "pid": 2,
                "path": "-2-6"
            },
            {
                "id": 7,
                "notice": "产品分类",
                "level": 2,
                "pid": 2,
                "path": "-2-7"
            },
            {
                "id": 8,
                "notice": "用户管理",
                "level": 2,
                "pid": 3,
                "path": "-3-8"
            },
            {
                "id": 9,
                "notice": "角色管理",
                "level": 2,
                "pid": 3,
                "path": "-3-9"
            },
            {
                "id": 10,
                "notice": "菜单管理",
                "level": 2,
                "pid": 3,
                "path": "-3-10"
            }
        ]

  

结果:

[{'id': 1, 'notice': '订单管理', 'level': 1, 'pid': 0, 'path': '-1', 'children': [{'id': 4, 'notice': '订单列表', 'level': 2, 'pid': 1, 'path': '-1-4', 'children': []}, {'id': 5, 'notice': '退款管理', 'level': 2, 'pid': 1, 'path': '-1-5', 'children': []}]}, {'id': 2, 'notice': '产品管理', 'level': 1, 'pid': 0, 'path': '-2', 'children': [{'id': 6, 'notice': '产品列表', 'level': 2, 'pid': 2, 'path': '-2-6', 'children': []}, {'id': 7, 'notice': '产品分类', 'level': 2, 'pid': 2, 'path': '-2-7', 'children': []}]}, {'id': 3, 'notice': '权限管理', 'level': 1, 'pid': 0, 'path': '-3', 'children': [{'id': 8, 'notice': '用户管理', 'level': 2, 'pid': 3, 'path': '-3-8', 'children': []}, {'id': 9, 'notice': '角色管理', 'level': 2, 'pid': 3, 'path': '-3-9', 'children': []}, {'id': 10, 'notice': '菜单管理', 'level': 2, 'pid': 3, 'path': '-3-10', 'children': []}]}]

 

衍生出来一个算法题 

obj = {
    'name':'总纲',
    'children': [
        {
            'name': '第一章',
            'children': [
                {
                    'name': "第一节",
                    'children': [
                        {
                            'name': '第一项',
                            'children': [
                                {
                                    'name':'第一列'
                                }
                            ]
                        }
                    ]
                },
                {
                    'name': "第二节",
                    'children': [
                        {
                            'name': '第二项',
                        }
                    ]
                }
            ]
        },
        {
            'name': '第二章',
            'children': [
                {
                    'name': "第三节",
                    'children': [
                        {
                            'name': '第三项'
                        }
                    ]
                }
            ]
        },
        {
            'name': '第三章',
        }
    ]
}

# 输出结果
 ['总纲', '(1)第一章', '(1 1)第一节', '(1 1 1 )第一项', '(1 1 1 1 )第一列', '(1 2)第二节', '(1 2 1 )第二项', '(2)第二章', '(2 1)第三节', '(2 1 1 )第三项', '(3)第三章']

代码解决思路

def print_tree(tree, prefix=""):
    result = []
    result.append(f"{prefix}{tree['name']}")

    if 'children' in tree:
        for i, child in enumerate(tree['children']):
            new_prefix = f"{prefix}{(i + 1)}"
            result.extend(print_tree(child, new_prefix))

    return result

# Example usage
obj = {
    'name': '总纲',
    'children': [
        {
            'name': '第一章',
            'children': [
                {
                    'name': "第一节",
                    'children': [
                        {
                            'name': '第一项',
                            'children': [
                                {
                                    'name': '第一列'
                                }
                            ]
                        }
                    ]
                },
                {
                    'name': "第二节",
                    'children': [
                        {
                            'name': '第二项'
                        }
                    ]
                }
            ]
        },
        {
            'name': '第二章',
            'children': [
                {
                    'name': "第三节",
                    'children': [
                        {
                            'name': '第三项'
                        }
                    ]
                }
            ]
        },
        {
            'name': '第三章'
        }
    ]
}

output = print_tree(obj)
print(output)

 

标签:notice,name,Python,pid,id,树形,数组,path,children
From: https://www.cnblogs.com/rianley/p/18294999

相关文章

  • Python 数据挖掘
    数据挖掘基础数据挖掘:这种从数据中“淘金”,从大量数据(包括文本)中挖掘出隐含的、未知的、对决策有潜在价值的关系、模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法、工具和过程,就是数据挖掘;它是利用各种分析工具在大量数据中寻......
  • Python Selenium+cookie+XPATH爬取数据
    以某科研基金信息平台为例,写了一个基于selenium的web自动化爬虫。不带验证码防反爬以及代理ip池,是最基础的自动化工具爬虫。一、首先,此平台需要登录后才能正常访问,否则数据不全,因此需要登录后获取cookie,以便selenium能够以登录状态运行1.F12打开开发者工具,找到network(网络),在登录......
  • Python中的元组:为什么它们比列表更快?
    引言        在Python编程语言中,数据结构是存储和组织数据的强大工具。Python提供了多种内置数据结构,如列表(List)、字典(Dictionary)、集合(Set)等。元组(Tuple)是其中一种非常重要的数据结构,它因其独特的特性和用途,在Python编程中占有一席之地。一、元组的定义     ......
  • Day5(哈希表) |242.有效的字母异位词 & 349.两个数组的交集 & 202.快乐数&1.两数之和
    242.有效的字母异位词给定两个字符串*s*和*t*,编写一个函数来判断*t*是否是*s*的字母异位词。注意:若*s*和*t*中每个字符出现的次数都相同,则称*s*和*t*互为字母异位词。示例1:输入:s="anagram",t="nagaram"输出:true示例2:输入:s="rat",t="c......
  • 【每日一练】python文件读.写.追加基本用法
    """本节课程内容:1.打开一个文件,模式为写入2.用传参方式写入文件内容3.如何追加文件内容4.如何读取新写入的文件5.牢记操作完一定要关闭程序使用close()函数Ps:如果写完文件后就读取文件,需要使用seek(0)把指针复位到开头。否则,下面读取文件为空,因为写完后指针会停留在尾......
  • python+flask计算机毕业设计小型社区疫情期间应急线上管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球疫情的持续蔓延,小型社区作为社会的基本单元,其疫情防控能力直接关系到居民的生命安全与社会的稳定。疫情期间,传统的管理方式面临诸......
  • TIOBE 7月编程排行榜出炉!Python再次出圈
    又到了周三,本周有过半了,大家好呀~~每月的TIOBE编程排行榜都是技术社区关注的焦点,作为编程语言流行度的晴雨表,它反映了行业趋势和技术走向。2024年7月的榜单揭晓了一个重要变化:Python再次登上榜首,成为最受欢迎的编程语言。这个消息对于开发者和企业来说,都具有非凡的意义。 ......
  • Python TensorFlow Keras深度学习模型RetinaNet进行目标检测分析车牌数据
    全文链接:https://tecdat.cn/?p=36968原文出处:拓端数据部落公众号目标检测作为计算机视觉领域的关键任务之一,在交通管理、智能安防、自动驾驶等众多应用场景中具有重要意义。车牌作为车辆的重要标识,其准确检测对于车辆识别、交通监控等系统的性能提升至关重要。传统的目标检测方......
  • 量化交易入门:如何在QMT中配置Python环境,安装第三方依赖包
    哈喽,大家好,我是木头左!引言QMT,作为量化交易系统中的佼佼者,以其强大的功能和灵活的操作性,受到了广大投资者的青睐。但是,对于很多新手来说,如何在QMT中配置Python环境,安装第三方依赖包,却是一个让人头疼的问题。本文将从零开始,手把手教你如何在QMT中配置Python环境,安装第三方依赖包......
  • Python 爬虫与 Java 爬虫:相似之处、不同之处和选项
    在信息时代,网络上可用的数据量巨大且不断增长。为了从这些数据中提取有用的信息,爬虫已成为一种重要的技术。Python和Java都是流行的编程语言,都具有强大的爬虫功能。本文将深入探讨Python爬虫和Java爬虫之间的差异,以帮助您在选择适合您需求的语言时做出明智的决定。一......