zoukankan      html  css  js  c++  java
  • 分类的数据处理 第一种递归处理,第二种树型结构 无极限分类

    数据格式:
    data=[
        {"cat_id":3,"name":"青浦","parent_id":1},
        {"cat_id": 2, "name": "张江", "parent_id": 4},
        {"cat_id":4,"name":"浦东","parent_id":1},
        {"cat_id":5, "name": "北京", "parent_id": 0},
        {"cat_id":6, "name": "昌平", "parent_id": 5},
        {"cat_id": 1, "name": "上海", "parent_id": 0},
    ]
    第一种处理(递归):
    将数据如下输出:
    上海
    -青浦
    -浦东
    --张江
    北京
    -昌平
    ````
    代码如下:
    
    res = []
    def get_son(data,level = 0,parent_id = 0 ):
        for item in data:
            if item['parent_id'] == parent_id :
                item['level'] =level
                res.append(item)
                get_son(data,level+1,item['cat_id'])
    
        return res
        
    代码的执行过程
    '''
    1 p=0,l=0
        北京 c = 5,找北京的儿子,p =5 l=0+1
            昌平 c =6 ,找昌平的儿子 ,p=6 l =1+1
        上海 c =1 ,找上海的儿子 ,p=1 l=0+1
            青浦 c=3 找青浦的儿子 p=3 l = 1+1
            "浦东" cat_id":4 找浦东的儿子,p=4 l=1+1
               张江 c = 2 找张江的儿子  p=2 l=l+1+1
    '''
    
    第二种树的行式:
    需求如下:
    讲data 数据变成data1
    data1 = [
        {
            "cat_id": 1, "name": "上海", "parent_id": 0,
            "children":[
                {"cat_id":3,"name":"青浦","parent_id":1},
                {"cat_id": 4, "name": "浦东", "parent_id": 1,"children":
                    [{"cat_id": 2, "name": "张江", "parent_id": 4},]},
    
            ]
         },
        {"cat_id": 5, "name": "北京", "parent_id": 0,"children":[]},
    
    ]
    
    这样就可以通过循环嵌套的级数显示几级分类。
    for item in data1:
        print("一级分类:",item['name'])
        for item1 in item["children"]:
            print("二级分类:",item1.get('name'))
            
    代码如下:
    def get_tree(data):
        #lists = [{"cat_id":5, "name": "北京", "parent_id": 0,"children":[]},{"cat_id": 1, "name": "上海", "parent_id": 0}]
        lists= []
        tree = {}
        for i in data:
            tree[i["cat_id"]] = i    # {3:{"cat_id":3,"name":"青浦","parent_id":1},...}
        for item in data:
            if item['parent_id'] == 0:    # 说明它为根节点
                lists.append(tree[item['cat_id']])    # 插入根节点的字典
            else:
                if "children" not in tree[item["parent_id"]]:    # 判断每一个父类字典有没有children的key
                    tree[item['parent_id']]['children'] = []    # 添加children的空值key
                tree[item['parent_id']]['children'].append(tree[item['cat_id']])    # 把儿子对象添加进去
    
        return  lists

  • 相关阅读:
    聊聊oracle rowid与索引结构
    去除文本中的空行
    表与表空间
    文件导入到数据库——复杂版
    文件导入到数据库
    vmware workstation 12+oracle linux 5.10+oracle 11g 搭建rac
    oracle判断是否实施了rac
    面向对象-小练习
    面向对象-面向对象的可拓展性
    面向对象-一切皆对象
  • 原文地址:https://www.cnblogs.com/ludingchao/p/12507568.html
Copyright © 2011-2022 走看看