树结构的链接对象

时间:2015-07-17 15:31:54

标签: python

我想构建一个可以轻松构建的树结构,而不必记住分支的确切名称。我知道这个问题已经讨论过here,哪个解决方案工作正常,但仍然要求必须记住密钥的确切名称。使用以下解决方案,我可以使用自动完成功能:

class tree_dot:
""" A class to create a tree structure """

def __init__(self, name):
    self.name = name
    self.branches = []

def add_branch(self,branch_name):
    """ A method to add a branch to the tree which is itself a tree object """
    a = tree_dot(branch_name)
    setattr(self, branch_name, a)
    self.branches.append(a)

输出如下:

>>> Tree = tree_dot('Tree')
>>> Tree.add_branch('First')
>>> Tree.First.add_branch('Second')
>>> Tree.First.Second.add_branch('Third')
>>> Tree.First.Second.Third.name = 'This is the third branch !'

但是,我对这么长的name.name.name.name感到不舒服。这会造成问题吗?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:0)

由于 是递归的,所以在某种程度上不可能避免这么多的点。在使用类来表示递归结果方面,这是正常的。

如果您想避免记住键名,您可以随时添加一个默认属性作为连接列表:

Tree.c[0].c[0].c[1]

,或者存在任何索引。

另一种方法是使用键/值系统。我有时会做的事情是:

(['first','second','third'], tree_dot())

这是记住密钥的好方法。特别是如果您需要网络问题等应用程序(例如旅行推销员),这可能很有用,因为它可以存储在平面阵列中(使比较和其他功能更容易),而不会丢失数据。