层级列表: menus = [ {'id': 1, 'name': 'a一级', 'parent_id': 0}, {'id': 2, 'name': 'b一级', 'parent_id': 0}, {'id': 3, 'name': 'a二级', 'parent_id': 1}, {'id': 4, 'name': 'a二级级', 'parent_id': 1}, {'id': 5, 'name': 'b二级', 'parent_id': 2}, {'id': 6, 'name': 'b二级级', 'parent_id': 2}, {'id': 7, 'name': 'a三级', 'parent_id': 3}, {'id': 8, 'name': 'b三级级', 'parent_id': 5}, ] def format_menu(menus): nodes = {} data_temp = [] for item in menus: id, parentId, name = item["id"], item["parent_id"], item["name"] # nodes[]保存需要的字典格式 nodes[id] = {'id': id, "parentId": parentId, "name": name, 'children': []} # data_temp 保存id,parentId data_temp.append({'id': id, "parentId": parentId}) data = [] for i in data_temp: id = i['id'] parent_id = i['parentId'] node = nodes[id] if id == parent_id: data.append(node) else: parent = nodes.get(parent_id) if parent: parent['children'].append(node) else: data.append(node) print(data)
输出结果:
[ { "id": 1, "parentId": 0, "name": "a一级", "children": [ { "id": 3, "parentId": 1, "name": "a二级", "children": [ { "id": 7, "parentId": 3, "name": "a三级", "children": [] } ] }, { "id": 4, "parentId": 1, "name": "a二级级", "children": [] } ] }, { "id": 2, "parentId": 0, "name": "b一级", "children": [ { "id": 5, "parentId": 2, "name": "b二级", "children": [ { "id": 8, "parentId": 5, "name": "b三级级", "children": [] } ] }, { "id": 6, "parentId": 2, "name": "b二级级", "children": [] } ] } ]