zoukankan      html  css  js  c++  java
  • 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',

  • 相关阅读:
    PAT1137
    Ubuntu小工具
    C文件的格式化工具(astyle)
    linux批量替换文本字符串
    scp & cat远程文件操作
    上传附件中英文混合的文件名上传
    membership DB生成 & dll 强命名 & 证书生成
    机器Coding For WinForm
    机器Coding For WPF
    C# cmd bcp 导出数据
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/15105132.html
Copyright © 2011-2022 走看看