如何在Python中动态构建树
问题内容:
Python /编程初学者的问题…我想在Python中建立树形结构,最好基于字典。我发现可以很好地做到这一点的代码:
Tree = lambda: collections.defaultdict(Tree)
root = Tree()
可以很容易地填充为:
root['toplevel']['secondlevel']['thirdlevel'] = 1
root['toplevel']['anotherLevel'] = 2
...etc.
我想动态填充级别/叶子,以便我可以根据需要添加任意多个级别,并且叶子可以位于任何级别。我怎么做?
任何帮助是极大的赞赏。
问题答案:
您可以使用实用程序功能轻松完成此操作
def add_element(root, path, data):
reduce(lambda x, y: x[y], path[:-1], root)[path[-1]] = data
可以这样使用
import collections
tree = lambda: collections.defaultdict(tree)
root = tree()
add_element(root, ['toplevel', 'secondlevel', 'thirdlevel'], 1)
add_element(root, ['toplevel', 'anotherlevel'], 2)
print root
输出量
defaultdict(<function <lambda> at 0x7f1145eac7d0>,
{'toplevel': defaultdict(<function <lambda> at 0x7f1145eac7d0>,
{'secondlevel': defaultdict(<function <lambda> at 0x7f1145eac7d0>,
{'thirdlevel': 1}),
'anotherlevel': 2
})
})
如果要以递归方式实现此功能,则可以获取第一个元素并从当前元素中获取子对象,root
并从中剥离第一个元素path
,以进行下一次迭代。
def add_element(root, path, data):
if len(path) == 1:
root[path[0]] = data
else:
add_element(root[path[0]], path[1:], data)