欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 無限級分類樹狀結構生成算法的實現

 更新時間:2021年01月21日 15:53:46   作者:今日長劍在握  
這篇文章主要介紹了Python 無限級分類樹狀結構生成算法的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

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

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

首先,確保數據庫中存儲的類別信息如下:

[
 {"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,即家用電器屬于電器類產品。電吹風條目跟電器條目并無直接的標識進行關聯(lián),但需要用樹狀結構來表明 電器 <- 家用電器 <- 電吹風 的關系。

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

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

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

import json
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
if __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))

你試試運行一下,看看結構是否符合預期。

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

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

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

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

至此,無限級分類樹狀結構生成算法完成。你學會了嗎?

到此這篇關于Python 無限級分類樹狀結構生成算法的實現的文章就介紹到這了,更多相關Python 無限級分類樹狀結構內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • windows中python實現自動化部署

    windows中python實現自動化部署

    本文主要介紹了windows中python實現自動化部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python中super()的理解以及應用場景實例

    Python中super()的理解以及應用場景實例

    在python中關于類的定義可以分為兩種:老式類&新式類,在新式類中有這么一種方法super( ),下面這篇文章主要給大家介紹了關于Python中super()的理解以及應用場景的相關資料,需要的朋友可以參考下
    2021-09-09
  • python中from module import * 的一個坑

    python中from module import * 的一個坑

    from module import *把module中的成員全部導到了當前的global namespace,訪問起來就比較方便了。當然,python style一般不建議這么做,因為可能引起name conflict。
    2014-07-07
  • python實現對svn操作及信息獲取

    python實現對svn操作及信息獲取

    這篇文章主要介紹了python實現對svn的操作及信息獲取示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • MindSpore導入CUDA算子的解決方案

    MindSpore導入CUDA算子的解決方案

    本文介紹了在MindSpore標準格式下進行CUDA算子開發(fā)的方法和流程,可以讓開發(fā)者在現有的AI框架下仍然可以調用基于CUDA實現的高性能的算子,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Python 爬蟲學習筆記之正則表達式

    Python 爬蟲學習筆記之正則表達式

    正則表達式是用來匹配字符串非常強大的工具,在其他編程語言中同樣有正則表達式的概念,Python同樣不例外,利用了正則表達式,我們想要從返回的頁面內容提取出我們想要的內容就易如反掌了。
    2016-09-09
  • Python基于socket實現TCP/IP客戶和服務器通信

    Python基于socket實現TCP/IP客戶和服務器通信

    本主要介紹了Python socket網絡編程TCP/IP服務器與客戶端通信的相關資料,這里對Scoket 進行詳解并創(chuàng)建TCP服務器及TCP 客戶端實例代碼,需要的朋友可以參考下
    2021-06-06
  • python服務器中發(fā)送外部請求的基本步驟

    python服務器中發(fā)送外部請求的基本步驟

    在Python中,服務器發(fā)送外部請求是一個常見的操作,尤其是在需要集成不同服務或API時,有多種庫可以幫助你完成這項任務,但最流行和廣泛使用的庫之一是requests,下面給大家分享python服務器中發(fā)送外部請求的基本步驟,感興趣的朋友一起看看吧
    2024-08-08
  • python中property屬性的介紹及其應用詳解

    python中property屬性的介紹及其應用詳解

    這篇文章主要介紹了python中property屬性的介紹及其應用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • Python爬蟲之爬取最新更新的小說網站

    Python爬蟲之爬取最新更新的小說網站

    這篇文章主要介紹了Python爬蟲之爬取最新更新的小說網站,文中有非常詳細的代碼示例,對正在學習python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05

最新評論