zoukankan      html  css  js  c++  java
  • 树的结构,无限极关联

    根节点,树的结构,无限极关联

    data=[
        {"cat_id":3,"name":"青浦","parent_id":1},
        {"cat_id": 2, "name": "张江", "parent_id": 4},
        {"cat_id":4,"name":"浦东","parent_id":1},
        {"cat_id":5, "name": "北京", "parent_id": 0},
        {"cat_id":6, "name": "昌平", "parent_id": 5},
        {"cat_id": 1, "name": "上海", "parent_id": 0},
    ]
    
    # 1、变成这种格式
    '''
    上海
    -浦东
    --张江
    -青浦
    北京
    昌平
    '''
    
    res = []
    def get_son(data,level = 0 ,parent_id = 0):
        for item in data:
            if item['parent_id'] == parent_id:
                item['level'] = level
                res.append(item)
                get_son(data,level+1,parent_id=item['cat_id'])
    
        return res
    
    
    t=get_son(data)
    
    for i in t:
        print(i['level']*"-",i['name'])
    
    # 2、变成这种格式
    '''
    data1 = [
        {"cat_id": 1, "name": "上海", "parent_id": 0,
              "children":[
                  {"cat_id":4,"name":"浦东","parent_id":1,
                   "children":[
                      {"cat_id": 2, "name": "张江", "parent_id": 4},
                   ]
                  }
              ]
              },
             ]
    
    '''
    
    
    def get_tree(data):
        lists = []
        tree = {}
        for i in data:
            tree[i['cat_id']] = i  # 给它变成k,v的形式,k就是cat_id,v就是这个字典对象
        for item in data:
            if item['parent_id'] == 0:  # 说明它是根节点
                lists.append(tree[item['cat_id']])  # 将根节点的字典添加到列表中
            else:
                if 'children' not in tree[item['parent_id']]:  # 判断每一个字典(对象)有没有属于自己的儿子
                    tree[item['parent_id']]['children'] = []  # 没有就给字典(该对象)添加一个新的名为children的key,并且赋值空列表
                tree[item['parent_id']]['children'].append(tree[item['cat_id']]) # 把儿子对象添加进去
    
        return lists
    
    
    # item=为一个个的字典对象
    #     {"cat_id":3,"name":"青浦","parent_id":1},
    #     {"cat_id": 2, "name": "张江", "parent_id": 4},
    #     {"cat_id":4,"name":"浦东","parent_id":1},
    #     {"cat_id":5, "name": "北京", "parent_id": 0},
    #     {"cat_id":6, "name": "昌平", "parent_id": 5},
    #     {"cat_id": 1, "name": "上海", "parent_id": 0},
    
    
    # tree={
    #     3:{"cat_id":3,"name":"青浦","parent_id":1},
    #     2:{"cat_id": 2, "name": "张江", "parent_id": 4},
    #     4:{"cat_id":4,"name":"浦东","parent_id":1},
    #     5:{"cat_id":5, "name": "北京", "parent_id": 0},
    #     6:{"cat_id":6, "name": "昌平", "parent_id": 5},
    #     1:{"cat_id": 1, "name": "上海", "parent_id": 0},
    # }
    
    
    

  • 相关阅读:
    linux常用的一些命令
    C语言之初认识
    前端VUE基于gitlab的CI_CD
    【Github】在repo中添加其它repo: adding embedded git repository
    【Algorithm】Sorting Algorithm
    【gitbook】gitbook init报错解决
    8 款浏览器兼容性测试工具介绍,需要的赶紧收藏吧!
    软件测试适合女生吗?大厂内部测试人员这样说!
    6 大测试用例设计题详细整理— 助攻高薪求职之路!
    APP 兼容性测试之云测平台体验
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12506465.html
Copyright © 2011-2022 走看看