• python算法实现list转tree 型结构


    1。算法实现:

    待被处理的数据结构:

    2.目标效果:

     设计思路:

    dict.setdefault(k,v),如果存在k,返回dict的k的v,否则添加{k:v}并返回他的v,

    def list_to_tree(data):
        i = 0
        res = {}
        for v in data:
            v["parent_id"] = v["parent_id"] if v["parent_id"] else 0
            res.setdefault(v["id"], v).update(v)
    
            res.setdefault(v["parent_id"], {}).setdefault("children", []).append(res.get(v["id"], v))
    
    
        return res[0]["children"]
    

      

    实现逻辑:

    先添加id为1的id,然后再加parent,如果parent_id 已存在返回它的value,再对value进行设置children,存在则添加,如果chidren也存在,返回children的value进行append,如果不存在直接加键值对再加children,

    {1: {'id': 1, 'parent_id': 0, 'name': 'A'}}
    {1: {'id': 1, 'parent_id': 0, 'name': 'A'}, 0: {'children': [{'id': 1, 'parent_id': 0, 'name': 'A'}]}}

    然后:

    {

        1: {'id': 1, 'parent_id': 0, 'name': 'A'},

        0: {'children': [

          {'id': 1, 'parent_id': 0, 'name': 'A'}

          ]   

    },

    2: {'id': 2, 'parent_id': 1, 'name': 'AA'}}
    {1: {'id': 1, 'parent_id': 0, 'name': 'A', 'children': [{'id': 2, 'parent_id': 1, 'name': 'AA'}]},

    0: {'children': [{'id': 1, 'parent_id': 0, 'name': 'A', 'children': [{'id': 2, 'parent_id': 1, 'name': 'AA'}]}]},

    2: {'id': 2, 'parent_id': 1, 'name': 'AA'}}

     算法应用场景:

    树形目录设计表返回前端数据:

    [
        {
            "id": 1,
            "parent_id": 0,
            "name": "A",
            "children": [
                {
                    "id": 2,
                    "parent_id": 1,
                    "name": "AA"
                },
                {
                    "id": 3,
                    "parent_id": 1,
                    "name": "AB",
                    "children": [
                        {
                            "id": 4,
                            "parent_id": 3,
                            "name": "ABA"
                        }
                    ]
                }
            ]
        },
        {
            "id": 11,
            "parent_id": 0,
            "name": "A",
            "children": [
                {
                    "id": 13,
                    "parent_id": 11,
                    "name": "A"
                }
            ]
        },
        {
            "id": 12,
            "parent_id": 0,
            "name": "A",
            "children": [
                {
                    "id": 14,
                    "parent_id": 12,
                    "name": "A"
                }
            ]
        }
    ]
     

    前端数据结构:

    template>
      <a-tree
        v-model="checkedKeys"
        checkable
        :expanded-keys="expandedKeys"
        :auto-expand-parent="autoExpandParent"
        :selected-keys="selectedKeys"
        :tree-data="treeData"
        @expand="onExpand"
        @select="onSelect"
      />
    </template>
    <script>
    const treeData = [
      {
        title: '0-0',
        key: '0-0',
        children: [
          {
            title: '0-0-0',
            key: '0-0-0',
            children: [
              { title: '0-0-0-0', key: '0-0-0-0' },
              { title: '0-0-0-1', key: '0-0-0-1' },
              { title: '0-0-0-2', key: '0-0-0-2' },
            ],
          },
          {
            title: '0-0-1',
            key: '0-0-1',
            children: [
              { title: '0-0-1-0', key: '0-0-1-0' },
              { title: '0-0-1-1', key: '0-0-1-1' },
              { title: '0-0-1-2', key: '0-0-1-2' },
            ],
          },
          {
            title: '0-0-2',
            key: '0-0-2',
          },
        ],
      },
      {
        title: '0-1',
        key: '0-1',
        children: [
          { title: '0-1-0-0', key: '0-1-0-0' },
          { title: '0-1-0-1', key: '0-1-0-1' },
          { title: '0-1-0-2', key: '0-1-0-2' },
        ],
      },
      {
        title: '0-2',
        key: '0-2',
      },
    ];
    

      

     

    设计表:

    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(20) NOT NULL COMMENT '菜单名称',
    `code` varchar(64) NOT NULL COMMENT '菜单标识',
    `url` varchar(255) NOT NULL COMMENT '菜单url',
    `order_number` int(11) NOT NULL DEFAULT '0' COMMENT '排序号',
    `description` varchar(255) DEFAULT NULL COMMENT '菜单说明',
    `parent_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '父级菜单ID',
    `app_id` int(11) NOT NULL COMMENT '应用ID',
    `state` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 0:禁用 1:启用',
    `icon` varchar(128) DEFAULT NULL COMMENT '菜单icon',

  • 相关阅读:
    SharePoint 2010 User Profile Sync Service自动停止
    如何区别多个svchost.exe?
    Log Parser分析IIS log的一个简单例子
    Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
    Windows中右键点击文件夹, 结果找不到共享选项卡, 怎么办?
    介绍SOS中的SaveModule命令
    SharePoint中Draft版本的文档不会收到document added的Alert Email
    和我一起学Windows Workflow Foundation(1)创建和调试一个WF实例
    门户网站
    C#基础—— check、lock、using语句归纳
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/15105132.html
Copyright © 2020-2023  润新知