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}]}]
    
  • 相关阅读:
    solr学习四(关于性能的杂知识)
    solr学习三(测试类,含普通与ExtractingRequestHandler测试)
    solr学习二(ExtractingRequestHandler)
    solr学习一(一大堆的学习资料)
    ElasticSearch 5.0 简介
    solrcloud配置中文分词器ik
    SolrCloud6.3 单机、集群、内置jetty、tomcat搭建、对collection操作
    Solr6.2.0 + zookeeper 集群配置
    03: MySQL基本操作
    02: MySQL的安装与基本配置
  • 原文地址:https://www.cnblogs.com/chmily/p/12055234.html
Copyright © 2011-2022 走看看