我正在编写一个应用程序,它将分层数据存储在python类实例的树结构中。根节点将具有子列表,并且每个子节点也将在列表中具有其自己的子节点,依此类推。
用户需要以简单的方式直接在树形结构上操作。最简单的方法是枚举分层列表。
因此,例如,如果用户想要在命令行中向Goose添加一些数据,则需要处理第2项子项1或2.1。
维护对这些树节点实例的这些可访问引用的最佳方法是什么?
每个节点都有一个时间戳和uuid。问题是每次运行程序时都必须对其进行序列化和反序列化。我们将按时间戳排序,但我只是不确定如何进行枚举,如果它应该动态完成或存储在树结构中。
答案 0 :(得分:1)
class Node:
def __init__(self, name):
self.name = name
self.parent = None
self.children = []
def __repr__(self):
return self.name
def add_node(self, child):
child.set_parent(self)
self.add_child(child)
def get_node(self, pos):
try:
return self.children[pos]
except IndexError:
raise ValueError('Node does not exist')
def access(self, string):
node = self
for i in map(lambda i: int(i)-1, string.split('.')):
node = node.get_node(i)
return node
def set_parent(self, parent):
self.parent = parent
def add_child(self, child):
self.children.append(child)
>>> n = Node('Root')
>>> l = Node('Lizards')
>>> w = Node('Waterfowls')
>>> g = Node('Goose')
>>> n.add_node(l)
>>> n.add_node(w)
>>> w.add_node(g)
>>> n.access('1')
'Lizards'
>>> n.access('2')
'Waterfowls'
>>> n.access('2.1')
'Goose'
>>> w.access('1')
'Goose'