我有一个嵌套字典,如下所示:
{
"g": {
"o": {}
},
"h": {
"p": {}
},
"e": {
"v": {},
"m": {
"s": {}
}
},
"f": {
"n": {}
},
"a": {
"i": {}
},
"d": {
"u": {},
"l": {
"r": {}
}
},
"b": {
"j": {}
},
"c": {
"t": {},
"k": {
"q": {
"z": {}
}
}
}
}
是否有快速方法将其转换为列表列表以获得以下输出:
[g, o]
[h, p]
[e, v]
[e, m, s]
[f, n]
[a, i]
[d, u]
[d, l, r]
[b, j]
[c, t]
[c, k, q, z]
当我们遇到一个空字典时,我们停止。例如,我们从" g"开始,它有孩子" o"而这个名单又没有孩子,因此列表包括" g"和" o"。
另一个例子:从" e"开始,孩子们是" v"和" m"和" m"已经" s"。因此,我们有两个列表:一个用" e"和" v"和另一个" e"," v"和" m"。我尝试创建一个递归函数,但遗憾的是,它并没有很好。
答案 0 :(得分:2)
这应该非常快,使用带生成器的递归函数:
def paths(tree, cur=()):
if not tree:
yield cur
else:
for n, s in tree.items():
for path in paths(s, cur+(n,)):
yield list(path)
使用:
list(paths(your_dict))