分类的数据处理 第一种递归处理,第二种树型结构 无极限分类
数据格式: 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