hellozizi
# 第一种 
res_list = [
        {\'cat_id\':1,\'name\':\'北京\',\'parent_id\':0},
        {\'cat_id\':2,\'name\':\'杭州\',\'parent_id\':0},
        {\'cat_id\':3,\'name\':\'海淀区\',\'parent_id\':1},
        {\'cat_id\':4,\'name\':\'海淀xx小区\',\'parent_id\':3},
        {\'cat_id\':6,\'name\':\'西湖区\',\'parent_id\':2},
        {\'cat_id\':7,\'name\':\'三墩\',\'parent_id\':6},
    ]
  
  # 创建结果集
    res = []
  
  
    def get_tree(data, level=0, parent_id=0, is_clear=True):
       
    # 第一次调用该方法,则清空列表内上次存放的结果
       if is_clear:
            res.clear()
     # 循环匹配
        for item in data:
            if item.get(\'parent_id\') == parent_id:
          # 用于记录当前记录的层级
                item[\'level\'] = level
          # 将结果加入结果集
                res.append(item)
          # 递归调用函数,继续执行,直到匹配完所有结果
                get_tree(data, level=level+1, parent_id=item.get(\'cat_id\'), is_clear=False)
        return res

    get_tree(res_list)
  
 
  # 打印查看效果
    print(res)
    for r in res:
        print(\'-\'*r.get(\'level\')+r.get(\'name\'))


# 第二种
# (注意:可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。)
res_list = [
        {\'cat_id\':1,\'name\':\'北京\',\'parent_id\':0},
        {\'cat_id\':2,\'name\':\'杭州\',\'parent_id\':0},
        {\'cat_id\':3,\'name\':\'海淀区\',\'parent_id\':1},
        {\'cat_id\':4,\'name\':\'海淀xx小区\',\'parent_id\':3},
        {\'cat_id\':6,\'name\':\'西湖区\',\'parent_id\':2},
        {\'cat_id\':7,\'name\':\'三墩\',\'parent_id\':6},
    ]

def get_son(data):
    # 创建结果集
    res_list = []
    # 创建空树
    tree = {}

    # 将所有分枝加入树中
    for item in data:
        tree[item.get(\'cat_id\')] = item

    for item in data:
        # 若parent_id为0,即为顶级标签,直接存入结果集
        if item.get(\'parent_id\') == 0:
            res_list.append(item)
        else:
            # 获取当前分枝所在的主干
            current_tree = tree.get(item.get(\'parent_id\'))

            if \'children\' not in current_tree:
                current_tree[\'children\'] = []

            # 将分支加入主干中
            current_tree.get(\'children\').append(item)
    # 返回结果
    return res_list

# 打印测试
print(get_son(city_list))
 
 

 

分类:

技术点:

相关文章: