树的结构,无限极关联

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

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},
# }


posted @ 2020-03-16 20:48  alen_zhan  阅读(121)  评论(0编辑  收藏  举报
返回顶部