• 两种无限递归菜单


    # 第一种 
    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))
     
     
  • 相关阅读:
    axios的使用/
    jQuery好玩的双向控制轮播
    vue的路由跳转方式/两种
    vfor的某些注意事项
    vue使用插件时不能撑满页面?
    swiper中的双向控制器不生效问题
    sass的安装及使用
    .net必懂题
    软件架构初读01
    EJB
  • 原文地址:https://www.cnblogs.com/hellozizi/p/11816043.html
Copyright © 2020-2023  润新知