分类的数据处理 第一种递归处理,第二种树的形式

Posted ludingchao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分类的数据处理 第一种递归处理,第二种树的形式相关的知识,希望对你有一定的参考价值。

数据格式:
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

技术图片

 

以上是关于分类的数据处理 第一种递归处理,第二种树的形式的主要内容,如果未能解决你的问题,请参考以下文章

无限级分类

几十万条数据用PHP递归能实现无限级分类吗

FreeSql 使用 ToTreeList/AsTreeCte 查询无限级分类表

快速排序

决策树算法——处理一些特殊的分类

Throws关键字--异常处理的第一种方式,交给别人处理和第二种方式,自己处理