【发布时间】:2017-01-13 21:02:35
【问题描述】:
我有以下代码:
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为键的字典项中。
标签: python python-3.x dictionary recursion pycharm