zoukankan      html  css  js  c++  java
  • 两种无限递归菜单

    # 第一种 
    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))
     
     
  • 相关阅读:
    leetcode------Remove Element
    leetcode------Merge Two Sorted Lists
    [转载]Unity3D 游戏引擎之使用C#语言建立本地数据库(SQLITE)
    [转载]VS2012创建MVC3项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。
    [转载]Unity3D 访问Access数据库
    [转载]C#导入XLS数据到数据库
    [转载]Unity3D的断点调试功能
    [Unity3D]支持的视频格式
    unity 3d 获取鼠标当前坐标
    [转载]VS2012程序打包部署详解
  • 原文地址:https://www.cnblogs.com/hellozizi/p/11816043.html
Copyright © 2011-2022 走看看