1. 程式人生 > >分類方式、遞迴、樹狀

分類方式、遞迴、樹狀

[TOC] # 分類方式1:遞迴方式 ![](https://img2020.cnblogs.com/blog/1736414/202003/1736414-20200316171329273-1417131894.png) ```python data = [ {"cat_id": 6, "name": "昌平", "parent_id": 5}, {"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": 1, "name": "上海", "parent_id": 0}, ] ''' 上海 -浦東 --張江 -青浦 北京 -昌平 ''' res = [] def sone(data, level=0, parent_id=0): for item in data: if item['parent_id'] == parent_id: item['level'] = level res.append(item) sone(data, level + 1, item['cat_id']) return res t = sone(data) print(t) for i in t: print(i['level'] * '-',i['name']) ''' t= [{'cat_id': 5, 'name': '北京', 'parent_id': 0, 'level': 0}, {'cat_id': 6, 'name': '昌平', 'parent_id': 5, 'level': 1}, {'cat_id': 1, 'name': '上海', 'parent_id': 0, 'level': 0}, {'cat_id': 3, 'name': '青浦', 'parent_id': 1, 'level': 1}, {'cat_id': 4, 'name': '浦東', 'parent_id': 1, 'level': 1}, {'cat_id': 2, 'name': '張江', 'parent_id': 4, 'level': 2}] ''' ``` # 分類方式2:樹狀 ```python 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}, ] ''' tree={ 3:{"cat_id":3,"name":"青浦","parent_id":1}, 2:{"cat_id": 2, "name": "張江", "parent_id": 4}, 4:{"cat_id":4,"name":"浦東","parent_id":1}, 5:{"cat_id":5, "name": "北京", "parent_id": 0}, 6:{"cat_id":6, "name": "昌平", "parent_id": 5}, 1:{"cat_id": 1, "name": "上海", "parent_id": 0}, } ''' def get_tree(data): lists = [] tree = {} for i in data: tree[i['cat_id']] = i for item in data: if item['parent_id'] == 0: dict1 = tree[item['cat_id']] lists.append(dict1) else: dict2 = tree[item["parent_id"]] if "children" not in dict2: dict2['children'] = [] dict2['children'].append(tree[item['cat_id']]) return lists print(get_tree(data)) ''' get_tree(data) = [ {'cat_id': 5, 'name': '北京', 'parent_id': 0, 'children': [ {'cat_id': 6, 'name': '昌平', 'parent_id': 5} ] }, {'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} ] } ] } ] ''' 這樣就可以通過迴圈巢狀的級數顯示幾級分類。 for item in data1: print("一級分類:",item['name']) for item1 in item["children"]: print("二級分類:",item1.get('name'