我正在尝试使用元组('a','b','c')并创建一个像这样的分层字典: {'a':{'b':{'c':{}}}}。我正在使用递归来做到这一点。当我在脚本的每个阶段之后打印出字典(许多打印仅用于调试目的)时,它表明字典正在被正确创建,但随后它被拆开并保持不正确。我留下的字典是{'c':{}}。我必须使用递归部分做一些不正确的事情。任何帮助将非常感激。这是我的代码:
def incr_dict(dct,tpl):
if len(tpl) == 0:
dct = dct
print(dct)
print('1')
else:
dct = {tpl[-1]:dct}
print(dct)
print('2')
incr_dict(dct, tpl[0:-1])
print(dct)
print('3')
return dct
dct = {} tpl =('a','b','c')
dct = incr_dict(dct,tpl)
打印(DCT) 打印( '4')
答案 0 :(得分:1)
你 ALMOST 那里!!将incr_dict(dct, tpl[0:-1])
行更改为阅读return incr_dict(dct, tpl[0:-1])
。我相信这将解决问题。
使用递归时,重要的是返回递归调用 - 否则更高级别'递归不能使用新信息。通过返回递归,执行将继续递归直到满足终止条件,然后计算的值将开始从链返回,直到它们最终从函数的第一次调用返回。
最终代码应如下所示:
def incr_dict(dct, tpl):
if len(tpl) == 0:
dct = dct
else:
dct = {tpl[-1]:dct}
return incr_dict(dct, tpl[0:-1])
return dct
dct = {}
tpl = ('a', 'b', 'c')
dct=incr_dict(dct, tpl)
print(dct)
为清楚起见,我删除了一些调试语句。