を働いていない私は、次のコードを持っている:パイソン - 再帰
d = {'init':
[{'solve':
[{'subsolve':
[{'vals': [{'Blade summary': 'asdf'},
{'Blade summary': 'fdsa'}]}]},
{'subsolve':
[{'vals': [{'Blade summary': 'ffff'}]}]}]},
{'solve':
[{'subsolve':
[{'vals': 'bbbb'}]}]}]}
def parseDics(lst, mainReg):
print('call')
for dic in lst:
for key, vals in dic.items():
if key == mainReg:
if mainReg == 'vals':
yield vals
parseDics(vals, 'vals')
else:
parseDics(vals, mainReg)
if __name__=='__main__':
pp.pprint(list(parseDics(d['init'], 'solve')))
関数自体は完了していないが、それは今のところ問題はありません。問題は、再帰呼び出しが機能しないということです。
私は今それを実行しようとすると、私はこれだけの出力が得られます:
call
[]
だから、関数は一度だけ呼び出されました。ネストされた関数呼び出し(私はPyCharmを使用しています)に入ってみると、私は単純にできず、関数呼び出しは "過剰実行"です。
私は間違っていますか?なぜ私の関数は再帰的に呼び出されないのですか?
'yield from parseDics(vals、' vals ') '? –
あなたのコードは、キーが 'solve'か' vals'であるかどうかだけをチェックし、 'subsolve'をキーとする辞書項目に決して再帰しません。 – Dunes