【发布时间】:2015-02-24 08:02:45
【问题描述】:
我正在尝试编写函数以在列表格式列表和嵌套字典格式之间移动树结构。下面的代码中给出了这两个函数(paths2tree 和 tree2paths)。从列表列表到嵌套树的转换(paths2tree 函数)工作正常,但反向转换(tree2paths,构建为迭代器)无法生成正确的列表。
最后的一小段代码测试了这两个函数。在tree2paths 转换中,一个打印语句表明该函数正在生成正确的列表,但该 yield 语句似乎没有将该信息返回给调用语句。 tree2paths 函数返回正确的列表,但格式不正确。
知道为什么 yield 语句没有返回可用列表吗?
def paths2tree(paths):
tree = {}
for path in paths:
current_level = tree
for part in path:
if part not in current_level:
current_level[part] = {}
current_level = current_level[part]
return tree
def tree2paths(tree,base=None):
for branch in tree.keys() :
if base is None:
subbase = [branch]
else:
subbase = base+[branch]
yield subbase
print subbase
newbase = list(tree2paths(tree[branch],subbase))
yield newbase
paths = [['root','boot','bah'],
['root','boot'],
['root','boot','bad'],
['root'],
['root','toot'],
['root','toot','tah'],
['root','toot','tad'],
['root','toot','tad','two']
]
atree = paths2tree(paths)
print atree
newpaths = list(tree2paths(atree))
print newpaths
【问题讨论】:
标签: python python-2.7 tree iterator