对对python 树状嵌套结构的实现思路详解树状嵌套结构的实现思路详解
今天小编就为大家分享一篇对python 树状嵌套结构的实现思路详解,具有很好的参考价值,希望对大家有所帮
助。一起跟随小编过来看看吧
原始数据原始数据
原始数据大致是这样子的:
每条数据中的四个数据分别是 当前节点名称,节点描述(指代一些需要的节点属性),源节点(即最顶层节点),父节点(当前
节点上一层节点)。
datas = [
["root", "根节点", "root", None],
["node1", "一级节点1", "root", "root"],
["node2", "一级节点2", "root", "root"],
["node11", "二级节点11", "root", "node1"],
["node12", "二级节点12", "root", "node1"],
["node21", "二级节点21", "root", "node2"],
["node22", "二级节点22", "root", "node2"],
]
节点类节点类
抽象封装出一个节点类:
class Node(object):
def __init__(self, name: str, desc, parent: str, children: list):
"""
初始化
:param name:
:param desc:
:param parent:
:param children:
"""
self.name = name
self.desc = desc
self.parent = parent
self.children = children
def get_nodes(self):
"""
获取该节点下的全部结构字典
"""
d = dict()
d['name'] = self.name
d['desc'] = self.desc
d['parent'] = self.parent
children = self.get_children()
if children:
d['children'] = [child.get_nodes() for child in children]
return d
def get_children(self):
"""
获取该节点下的全部节点对象
"""
return [n for n in nodes if n.parent == self.name]
def __repr__(self):
return self.name
将原始数据转换为节点对象将原始数据转换为节点对象
nodes = list()
for data in datas:
node = Node(data[0], data[1], data[-1], [])
nodes.append(node)
为各个节点建立联系为各个节点建立联系
for node in nodes:
children_names = [data[0] for data in datas if data[-1] == node.name]
children = [node for node in nodes if node.name in children_names]
node.children.extend(children)
测试测试
评论0