Python 树结构的链接对象

Python 树结构的链接对象,python,Python,我想建立一个树结构,可以很容易地构建,而不必记住分支的确切名称。我知道这个问题已经讨论过了,哪种解决方案很好,但它仍然要求必须记住密钥的确切名称。通过以下解决方案,我可以使用自动完成: class tree_dot: """ A class to create a tree structure """ def __init__(self, name): self.name = name self.branches = [] def add_branch(self,branch

我想建立一个树结构,可以很容易地构建,而不必记住分支的确切名称。我知道这个问题已经讨论过了,哪种解决方案很好,但它仍然要求必须记住密钥的确切名称。通过以下解决方案,我可以使用自动完成:

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 !'
但是,我对这么长的名字感到不舒服。这会造成问题吗?有更好的方法吗?

因为它是递归的,在某种程度上不可能避免这么多点。就使用类来表示递归结果而言,这是正常的

如果要避免记住键名,可以始终添加一个默认属性,即连接列表:

Tree.c[0].c[0].c[1]
,或任何存在的索引

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

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

由于它是递归的,在一定程度上不可能避免这么多点。就使用类来表示递归结果而言,这是正常的

如果要避免记住键名,可以始终添加一个默认属性,即连接列表:

Tree.c[0].c[0].c[1]
,或任何存在的索引

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

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

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

谢谢您的回答。它似乎很有用,但它忽略了我觉得很方便的自动完成功能,有点像一个简单的GUI。我也不明白你的:(['first','second','third'],tree_dot()),似乎对我不起作用!谢谢你的回答。它似乎很有用,但它忽略了我觉得很方便的自动完成功能,有点像一个简单的GUI。我也不明白你的:(['first','second','third'],tree_dot()),似乎对我不起作用!