非递归方式
import json
def format(data):
print(json.dumps(data, indent=4, ensure_ascii=False, sort_keys=False, separators=(',', ':')))
def getTree(menu_list):
menu_map = {}
for item in menu_list:
item["child"] = []
menu_map[item["id"]] = item
tree = []
for item in menu_map.values():
if menu_map.get(item["pid"]):
menu_map[item["pid"]]["child"].append(item)
else:
tree.append(item)
return tree
if __name__ == '__main__':
menu_list = [
{
"id": 1,
"pid": 0,
"name": "top1"
},
{
"id": 2,
"pid": 0,
"name": "top2"
},
{
"id": 3,
"pid": 1,
"name": "top1-sub1"
},
{
"id": 4,
"pid": 1,
"name": "top1-sub2"
},
{
"id": 5,
"pid": 3,
"name": "top1-sub1-sub1"
},
{
"id": 6,
"pid": 2,
"name": "top2-sub1"
},
]
format(getTree(menu_list))
递归方式
import json
def format(data):
print(json.dumps(data, indent=4, ensure_ascii=False, sort_keys=False, separators=(',', ':')))
def getTree(menu_list,pid):
tree = []
for item in menu_list:
if item["pid"] == pid:
item["child"] = getTree(menu_list, item["id"])
tree.append(item)
return tree
if __name__ == '__main__':
menu_list = [
{
"id": 1,
"pid": 0,
"name": "top1"
},
{
"id": 2,
"pid": 0,
"name": "top2"
},
{
"id": 3,
"pid": 1,
"name": "top1-sub1"
},
{
"id": 4,
"pid": 1,
"name": "top1-sub2"
},
{
"id": 5,
"pid": 3,
"name": "top1-sub1-sub1"
},
{
"id": 6,
"pid": 2,
"name": "top2-sub1"
},
]
format(getTree(menu_list,0))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步