編集:提案された答えとそれがまだ完全に正しくない方法については、以下を参照してください。
Stack Overflowにはこれに似た質問がたくさんありますが、Pythonの質問とまったく同じものはありません。私はプログラミング初心者なので、気楽に行ってください。
次のようなネストされた辞書のツリーがあります。
[{'word': 'The',
'next': [{'word': 'End',
'next': None},
{'word': 'quick',
'next': [{'word': 'brown',
'next': [{'word': 'fox',
'next': None}]}]},
{'word': 'best',
'next': [{'word': 'of',
'next': [{'word': 'times',
'next': None}]}]}]}]
すべてのパスを上から下にフラット化して、最終的に次のようにします。
[[{'word': 'The'},
{'word': 'End'}],
[{'word': 'The'},
{'word': 'quick'},
{'word': 'brown'},
{'word': 'fox'}],
[{'word': 'The'},
{'word': 'best'},
{'word': 'of'},
{'word': 'times'}]]
そもそも元の構造を作成する素敵な小さな再帰関数を作成しましたが、それを非再帰化するのに苦労しています。これは私が得た限りです:
def flatten_combinations(result_tree, current_combo = None, all_combos = None):
if current_combo is None:
current_combo = []
if all_combos is None:
all_combos = []
if result_tree is None:
all_combos.append(current_combo)
return
for word in result_tree:
current_combo.append({'word': word['word']})
flatten_combinations(word['next'], current_combo, all_combos)
return current_combo
…これはこれを返します:
[{'word': 'The'},
{'word': 'End'},
{'word': 'quick'},
{'word': 'brown'},
{'word': 'fox'},
{'word': 'best'},
{'word': 'of'},
{'word': 'times'}]
…これは明らかにやや近いですが、完全には正しくありません。
関数は恐らく非Pythonであることがわかっていますが、私は自分でプログラミングを教えているので、このようなものを最初から考え抜くことができる、存在する可能性のある言語機能を利用しようとさえしていません(」彼そのメンバーが彼が少し考えを取り除くのを助けることを期待してQ&Aサイトに投稿すると言った)。
だから:私は何が間違っているのですか?
編集:以下のモシェはいくつかの問題を修正しました:
def flatten_combinations(result_tree, current_combo = None, all_combos = None):
if current_combo is None:
current_combo = []
if all_combos is None:
all_combos = []
if result_tree is None:
all_combos.append(current_combo)
return
for word in result_tree:
current_combo = current_combo[:]
current_combo.append({'word': word['word']})
flatten_combinations(word['next'], current_combo, all_combos)
return all_combos
これはまだ近いですが、完全には正しくありません。
[{'word': 'The'},
{'word': 'End'}],
[{'word': 'The'},
{'word': 'End'},
{'word': 'quick'},
{'word': 'brown'},
{'word': 'fox'}],
[{'word': 'The'},
{'word': 'End'},
{'word': 'quick'},
{'word': 'best'},
{'word': 'of'},
{'word': 'times'}]]