私は次のような「非標準」形式の辞書ツリーを持っています。
tree = {'0': {'A': {'B': {'C': {}}}},
{'D': {'E': {}},
{'F': {}}}}
リーフノードは、値が空のディクショナリであるディクショナリのキーと値のペアとして定義されます。次のようなリストのリストとして、すべてのリーフからルートへのパスを抽出したいと思います。
paths_ = [['C', 'B', 'A', '0'],
['E', 'D', '0'],
['F', 'D', '0']]
それが役立つ場合は、パスを逆にすることもできます。
paths_ = [['0', 'A', 'B', 'C'],
['0', 'D', 'E'],
['0', 'D', 'F']]
私はそれを再帰的に行わなければならないことを知っており、パスごとにアキュムレータリストが必要です。関数がパスリストを生成するのもいいでしょう。私がこれまでに持っているのはこれです:
def paths(node, subtree, acc=[]):
if not subtree:
yield [node]+acc
for n, s in subtree.items():
yield paths(n, s, acc)
それは本当に私が望むことをしません:
paths_ = list(paths('0', tree['0']))
理想的には、これはリストのリストを返すはずです。どんな助けでも大歓迎です。