zoukankan      html  css  js  c++  java
  • 无限极分类的实现方法(面试题)

    递归实现无限极分类

    data=[
        {"cat_id":3,"name":"沙河","parent_id":1},
        {"cat_id":4,"name":"sb镇","parent_id":3},
        {"cat_id": 1, "name": "北京", "parent_id": 0},
        {"cat_id":5,"name":"昌平","parent_id":1},
        {"cat_id":6,"name":"青浦","parent_id":2},
        {"cat_id": 2, "name": "上海", "parent_id": 0},
    ]
    # 需求样式
    '''
    北京
     -沙河
      --sb镇
     -昌平
    上海
     -青浦
    '''
    
    lis = []
    def get_son(data,parent_id=0,level=0,is_clear=True):
        if is_clear:
            lis.clear()
        # 遍历每一条数据对象
        for item in data:
            # 当 parent_id=0时,说明当前对象是父级
            if item['parent_id']==parent_id:
                item['level']=level
                lis.append(item)
                # 递归调用自身 ,继续遍历查找
                get_son(data,parent_id=item["cat_id"],level=level+1,
                                          					is_clear=False)  # 结果:[{'cat_id': 1, 'name': '北京', 'parent_id': 0, 'level': 0}, {'cat_id': 3, 'name': '沙河', 'parent_id': 1, 'level': 1}, {'cat_id': 4, 'name': 'sb镇', 'parent_id': 3, 'level': 2}, {'cat_id': 5, 'name': '昌平', 'parent_id': 1, 'level': 1}, {'cat_id': 2, 'name': '上海', 'parent_id': 0, 'level': 0}, {'cat_id': 6, 'name': '青浦', 'parent_id': 2, 'level': 1}]	          			               
    

    用树实现无限极分类

    def get_tree(data):
        # 定义一个 空列表和空字典
        lis = []
        tree = {}
        # 先循环遍历每一条数据
        for item in data:
            # 取出每一条数据的 cat_id ,并与当前遍历的数据重新组合放在自定义的 tree字典中,形式如:tree={3: {"cat_id":3,"name":"沙河","parent_id":1}, ...}
            # 得到新组合的tree字典数据 tree = {3:{数据一},4:{数据二}, ...}
            tree[item['cat_id']] = item
    
        # 再定义一个变量遍历原每一条数据
        for i in data:
            # 如果当前遍历的数据对象中 'parent_id'值为0 (就是没有父级)
            if not i['parent_id']:
                # 1、获取到 tree 字典中与当前对象 对应的 数据对象,2、添加到自定义 lis 表中
                lis.append(tree[i['cat_id']])
            else:
                # 如果当前数据对象 'parent_id'有值,(表示该数据是子级)
                # 1、拿到 parent_id的 值
                parent_id = i['parent_id']
                # 2、通过上步骤拿到的 值 在tree 字典中找到对应的数据对象(父级),判断该对象中是否有 children 字段
                if 'children' not in tree[parent_id]:
                    # 3、给父级数据对象添加 children 字段 并赋值为 []
                    tree[parent_id]['children'] = []
                # 将当前变遍历对象添加到父级
                # tree[parent_id]['children'].append(tree[i['cat_id']])
                tree[parent_id]['children'].append(i) # 跟上步骤意思相同
        return lis
    # 结果:[{'cat_id': 1, 'name': '北京', 'parent_id': 0, 'children': [{'cat_id': 3, 'name': '沙河', 'parent_id': 1, 'children': [{'cat_id': 4, 'name': 'sb镇', 'parent_id': 3}]}, {'cat_id': 5, 'name': '昌平', 'parent_id': 1}]}, {'cat_id': 2, 'name': '上海', 'parent_id': 0, 'children': [{'cat_id': 6, 'name': '青浦', 'parent_id': 2}]}]
    
  • 相关阅读:
    url 转码 urlencode和 urldecode
    通过启动函数定位main()函数
    关于溢出的总结1
    http://ctf.bugku.com/challenges#Mountain%20climbing:bugku--Mountain-Climbing
    http://ctf.bugku.com/challenges#love:bugku--love
    http://ctf.bugku.com/challenges#%E9%80%86%E5%90%91%E5%85%A5%E9%97%A8:bugku--逆向入门
    http://ctf.bugku.com/challenges#Timer(%E9%98%BF%E9%87%8CCTF):Bugku——Timer(阿里CTF)
    http://ctf.bugku.com/challenges#%E6%B8%B8%E6%88%8F%E8%BF%87%E5%85%B3--游戏过关
    填坑专记-手脱FSG壳

  • 原文地址:https://www.cnblogs.com/chmily/p/12055234.html
Copyright © 2011-2022 走看看