【问题标题】:recursively add to python dictionary from tuple从元组递归添加到python字典
【发布时间】:2014-08-14 03:58:19
【问题描述】:

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

【问题讨论】:

    标签: python-3.x recursion dictionary


    【解决方案1】:

    几乎在那里!将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) 
    

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

    【讨论】:

    • 非常感谢,效果很好。我知道这是一个我无法捕捉到的小错误,因为我一直盯着它太久了(当你在夏天的第一个月停止编码时会发生这种情况......)。
    猜你喜欢
    • 2014-12-07
    • 2018-02-23
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2019-08-09
    • 2017-09-17
    相关资源
    最近更新 更多