日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)

瀏覽:33日期:2022-06-29 13:46:44

后端研發(fā)的同學對無限級分類肯定映像深刻,當初花了不少時間吧?

無限級分類樹狀結(jié)構(gòu)的應(yīng)用場景很多,例如后端研發(fā)需要把用戶相關(guān)權(quán)限讀取出來并生成樹狀結(jié)構(gòu),前端研發(fā)拿到權(quán)限樹之后可以按照結(jié)構(gòu)展示用戶有權(quán)限訪問的欄目;再例如網(wǎng)頁上的欄目分級:

Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)

作者在初次接觸樹狀結(jié)構(gòu)生成需求的時候,也是撓頭,后來找到了一個代碼少且清晰易懂的生成算法:遞歸。

首先,確保數(shù)據(jù)庫中存儲的類別信息如下:

[ {'id': 1, 'name': ’電器’, 'parent': 0}, {'id': 2, 'name': ’水果’, 'parent': 0}, {'id': 3, 'name': ’家用電器’, 'parent': 1}, {'id': 4, 'name': ’電吹風’, 'parent': 3}, {'id': 5, 'name': ’電風扇’, 'parent': 3}, {'id': 6, 'name': ’臺燈’, 'parent': 3}, {'id': 7, 'name': ’商用電器’, 'parent': 1}, {'id': 8, 'name': ’大型電熱鍋’, 'parent': 7},]

字段 parent 記錄的是此條目的父編號,例如電吹風的父編號是 3,即電吹風屬于家用電器,而家用電器的父編號是 1,即家用電器屬于電器類產(chǎn)品。電吹風條目跟電器條目并無直接的標識進行關(guān)聯(lián),但需要用樹狀結(jié)構(gòu)來表明 電器 <- 家用電器 <- 電吹風 的關(guān)系。

通過 parent 尋找父編號,并建立關(guān)聯(lián)關(guān)系的操作實際上是循環(huán)往復(fù)的,直到找完所有的結(jié)點,這跟遞歸算法非常契合,很輕松便能寫出對應(yīng)的遞歸代碼:

def generate_tree(source, parent): tree = [] for item in source: if item['parent'] == parent: item['child'] = generate_tree(source, item['id']) tree.append(item) return tree

只需要將數(shù)據(jù)庫中存儲的信息傳遞給 generate_tree 函數(shù)即可。這段遞歸代碼在往復(fù)循環(huán)的過程中通過 parent 來尋找子結(jié)點,找到子結(jié)點后將其添加到樹中。完整代碼如下:

import jsondef generate_tree(source, parent): tree = [] for item in source: if item['parent'] == parent: item['child'] = generate_tree(source, item['id']) tree.append(item) return treeif __name__ == ’__main__’: permission_source = [ {'id': 1, 'name': ’電器’, 'parent': 0}, {'id': 2, 'name': ’水果’, 'parent': 0}, {'id': 3, 'name': ’家用電器’, 'parent': 1}, {'id': 4, 'name': ’電吹風’, 'parent': 2}, {'id': 5, 'name': ’電風扇’, 'parent': 3}, {'id': 6, 'name': ’臺燈’, 'parent': 3}, {'id': 7, 'name': ’商用電器’, 'parent': 1}, {'id': 8, 'name': ’大型電熱鍋’, 'parent': 7}, ] permission_tree = generate_tree(permission_source, 0) print(json.dumps(permission_tree, ensure_ascii=False))

你試試運行一下,看看結(jié)構(gòu)是否符合預(yù)期。

使用緩存優(yōu)化算法

遞歸算法中有很多重復(fù)的計算,這些計算不僅占用額外資源,還會降低函數(shù)執(zhí)行效率,因此需要對遞歸進行優(yōu)化。這里選用緩存優(yōu)化法提升函數(shù)執(zhí)行效率。

基本思路是每次找到結(jié)點關(guān)系后將此條目的編號添加到一個列表中緩存起來,代表此條目已找到結(jié)點關(guān)系。當往復(fù)循環(huán)執(zhí)行函數(shù)時再次遇到此條目可以跳過。代碼改動很簡單,增加一個緩存列表和控制流語句即可:

def generate_tree(source, parent, cache=[]): tree = [] for item in source: if item['id'] in cache: continue if item['parent'] == parent: cache.append(item['id']) item['child'] = generate_tree(source, item['id'], cache) tree.append(item) return tree

至此,無限級分類樹狀結(jié)構(gòu)生成算法完成。你學會了嗎?

到此這篇關(guān)于Python 無限級分類樹狀結(jié)構(gòu)生成算法的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python 無限級分類樹狀結(jié)構(gòu)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av自拍| 亚洲天堂一区二区| 日韩中文在线电影| 国产美女高潮在线观看| 狠狠久久伊人中文字幕| 精品国产一区二区三区av片| 日本电影久久久| 日本va欧美va欧美va精品| 青青草精品视频| 国产亚洲欧美日韩精品一区二区三区 | 91av亚洲| 日韩在线短视频| 激情欧美日韩一区| 国产日韩专区| 97精品国产99久久久久久免费| 欧美一区自拍| 欧美激情福利| xxxxx性欧美特大| 亚洲精品2区| 中文字幕日韩高清在线| 欧美影院精品| 国产精品久久久久久av公交车| 欧美a级一区二区| 日韩精品永久网址| 亚洲欧洲一区二区天堂久久| 亚洲乱码一区| 国产精品成人**免费视频 | 久久影院一区| 首页欧美精品中文字幕| 青青草伊人久久| 国产福利片在线观看| 国产综合色产| 日韩精品欧美大片| 国产福利一区二区精品秒拍| 福利视频一区| 午夜国产精品视频免费体验区| 亚洲免费毛片| 国产麻豆一区二区三区 | 久久香蕉网站| 免费久久精品| 日本v片在线高清不卡在线观看| 欧美激情99| 国产精品7m凸凹视频分类| 日韩精品免费一区二区夜夜嗨| 精品国产精品国产偷麻豆| 九九在线精品| 日韩国产精品久久久久久亚洲| 国产精品99久久久久久董美香| 蜜臀国产一区| 亚洲精品九九| 色爱综合av| 青草综合视频| 欧美日韩一二三四| 青草综合视频| 蜜桃一区二区三区| 国产欧美高清| 国产精品99免费看| 国产美女撒尿一区二区| 午夜电影亚洲| 精品国产午夜肉伦伦影院 | 国产精品一二| 欧美+日本+国产+在线a∨观看| 欧美日一区二区三区在线观看国产免| 日韩中文视频| 国产乱码精品一区二区三区四区 | 国产一区二区三区免费在线| 在线一区欧美| 久久久久免费| 久久国产精品久久久久久电车| 欧美极品中文字幕| 久久不射网站| 久久久久久自在自线| 亚洲日产av中文字幕| 日韩欧美二区| 国产精品香蕉| 亚洲影院天堂中文av色| 日韩一区二区中文| 国产欧美日韩精品一区二区三区| 制服诱惑一区二区| 激情久久99| 国产日产高清欧美一区二区三区 | 石原莉奈在线亚洲二区| 最新中文字幕在线播放| 欧美日韩精品一区二区三区在线观看| re久久精品视频| 97人人精品| 国产精品地址| 日本精品国产| 亚洲欧美日韩国产综合精品二区| 精品淫伦v久久水蜜桃| 日韩国产欧美三级| 久久成人亚洲| 亚洲午夜黄色| 不卡一二三区| 精品国产18久久久久久二百| 日韩二区在线观看| 鲁大师成人一区二区三区| 日韩毛片视频| 精品久久不卡| 美女尤物国产一区| 青青草精品视频| 国产探花在线精品一区二区| 日韩午夜av| 亚洲精品无播放器在线播放| 国产精品**亚洲精品| 伊人精品视频| av免费不卡国产观看| 欧美一区免费| 中文字幕一区二区三区四区久久 | 久久国产三级| 91精品久久久久久久久久不卡| 福利欧美精品在线| 日本国产欧美| 日韩黄色av| 日韩高清在线一区| 日韩av免费| 激情欧美亚洲| 丝袜av一区| 日韩毛片视频| 中文在线а√天堂 | 青青草国产成人99久久| 日本va欧美va精品| 日韩激情综合| 91精品丝袜国产高跟在线| 99视频一区| 视频一区二区三区在线| 亚洲五月综合| 日本va欧美va瓶| 欧美影院精品| 国产精品久久| 国产一卡不卡| 美女久久久久久| 国精品产品一区| 日韩久久视频| 国产综合精品| 欧美资源在线| 日本在线视频一区二区| 国产日本亚洲| 麻豆成人av在线| 免费一级欧美片在线观看网站| 精品伊人久久| 久久天堂成人| 蜜臀91精品一区二区三区| 亚洲+小说+欧美+激情+另类| 青草国产精品| 高潮久久久久久久久久久久久久| av一区在线| 亚洲一区久久| 日韩欧美另类中文字幕| 你懂的国产精品| 激情国产在线| 好吊日精品视频| 日韩综合一区二区| 美女视频网站久久| 在线一区av| 不卡在线一区| 日本国产欧美| 国产精品成久久久久| 亚洲视频综合| 亚洲精品高潮| 国产精品99一区二区三区| 激情久久婷婷| 日韩精品亚洲专区在线观看| 久久精品色播| 国产综合亚洲精品一区二| 日韩一区二区三区高清在线观看| 美女视频黄久久| av亚洲免费| 国产欧美一区二区三区米奇| 午夜久久99| 91综合网人人| 日韩电影免费网站| 日韩精品一区二区三区免费观影 | 亚洲精品动态| 国产精品一区二区美女视频免费看| 麻豆理论在线观看| 蜜桃视频第一区免费观看| 久久福利在线| 亚洲免费激情| 青青草伊人久久| 日韩综合精品| 中文字幕亚洲在线观看| 精品成av人一区二区三区| 亚洲一级在线| 蜜桃久久久久| 久久免费影院| 91一区二区| 欧美特黄一级| 久久久久久亚洲精品美女| 日韩专区精品| 日韩va亚洲va欧美va久久| 亚洲va中文在线播放免费| 中文字幕中文字幕精品| 久久久久久色| 天堂√中文最新版在线| 亚洲精选av| 久久国产日本精品| 国产伦理一区| 蜜桃免费网站一区二区三区| 欧美成a人国产精品高清乱码在线观看片在线观看久 |