为了保留作为参数发送的列表的顺序来构建树,我移到了另一个角度。我改用列表,顺序不变:
def build_tree(nodes, *args):
# create empty tree to fill
t = {}
# First group all pages w/ same parent
for node in nodes:
if node.parentKey is None:
key = 'root'
else:
key = node.parentKey.key()
if not t.has_key(key):
t[key] = []
t[key].append({ 'page' : node, 'children' : []})
pageTree = t['root']
# Iterate over there
build_page_tree(pageTree, t)
return pageTree
def build_page_tree(pageTree, nodes):
#Loop over selected list
for parent, node in nodes.iteritems():
# We don't need to loop over first level node
if parent is not 'root':
# Loop over current level in page tree
for item in pageTree:
# Match keys
if item['page'].key() == parent:
# Save node as child
item['children'] = node
# Only need to loop over childs if they are present
build_page_tree(item['children'], nodes)