从tuple递归添加到python字典

时间:2014-06-24 02:09:32

标签: python-3.x recursion dictionary

我正在尝试使用元组('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')

1 个答案:

答案 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) 

为清楚起见,我删除了一些调试语句。