假设我有一个包含以下字段的对象列表
父
值
这定义了一个树结构,类似于目录树。
我想以预购方式遍历列表。什么是最有效的方式?
通常情况下,在其他(更多命令性)语言中,我会迭代这些值,找到没有父项的值,然后为每一个,再次迭代其父项是我正在查看的那个对象,等等,但是在Python中有更聪明的方法吗?
答案 0 :(得分:7)
我首先会创建一个更合适的数据结构 - 捕获从父级到其子级的链接:
children = {}
for obj in tree:
children.setdefault(obj.parent, []).append(obj)
def preorder(root, children):
yield root.value
for child in children.get(root, []):
for value in preorder(child, children):
yield value
for root in children[None]:
for value in preorder(root, children):
print value
你也可以在这里使用collections.defaultdict
。