我想构建一个可以轻松构建的树结构,而不必记住分支的确切名称。我知道这个问题已经讨论过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感到不舒服。这会造成问题吗?有没有更好的方法呢?
答案 0 :(得分:0)
由于 是递归的,所以在某种程度上不可能避免这么多的点。在使用类来表示递归结果方面,这是正常的。
如果您想避免记住键名,您可以随时添加一个默认属性作为连接列表:
Tree.c[0].c[0].c[1]
,或者存在任何索引。
另一种方法是使用键/值系统。我有时会做的事情是:
(['first','second','third'], tree_dot())
这是记住密钥的好方法。特别是如果您需要网络问题等应用程序(例如旅行推销员),这可能很有用,因为它可以存储在平面阵列中(使比较和其他功能更容易),而不会丢失数据。