python树状图代码_Python⽆限级分类树状结构⽣成算法「实
⽤代码」
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 函数即可。这段递归代码在往复循环的过程中通过 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},
python新手代码画图
{"id": 8, "name": '⼤型电热锅', "parent": 7},
]
permission_tree = generate_tree(permission_source, 0)
print(json.dumps(permission_tree, ensure_ascii=False))
终端输出结果如下图所⽰:
使⽤缓存优化算法
递归算法中有很多重复的计算,这些计算不仅占⽤额外资源,还会降低函数执⾏效率,因此需要对递归进⾏优化。这⾥选⽤缓存优化法提升函数执⾏效率。
基本思路是每次到结点关系后将此条⽬的编号添加到⼀个列表中缓存起来,代表此条⽬已到结点关系。当往复循环执⾏函数时再次遇到此条⽬可以跳过。代码改动很简单,增加⼀个缓存列表和控制流语句即可:
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
⾄此,⽆限级分类树状结构⽣成算法完成。你学会了吗?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。