Python 在尝试编写递归函数以迭代嵌套字典时获取RecursionError

Python 在尝试编写递归函数以迭代嵌套字典时获取RecursionError,python,dictionary,recursion,Python,Dictionary,Recursion,我试图通过使用递归函数来迭代嵌套字典,但最终得到的消息是 RecursionError:调用Python对象时超出了最大递归深度 在任何语言中,这种形式的递归都会导致相应的递归错误,因为您不会更改传递给下一个递归调用的内容。无论传递给递归的第一级(这里是var),相同的值都会传递给递归的第二级,依此类推 此外,temp['A']基本上是一个列表,而不是字典 试试这个: def iterate_over(var): if type(var) is list : for x

我试图通过使用递归函数来迭代嵌套字典,但最终得到的消息是

RecursionError:调用Python对象时超出了最大递归深度


在任何语言中,这种形式的递归都会导致相应的递归错误,因为您不会更改传递给下一个递归调用的内容。无论传递给递归的第一级(这里是
var
),相同的值都会传递给递归的第二级,依此类推

此外,
temp['A']
基本上是一个列表,而不是字典

试试这个:

def iterate_over(var):
    if type(var) is list :
        for x in var:
            iterate_over(x)
    elif(type(var) is dict and len(var)>0):
        print (next(iter(var.values())))
        iterate_over(next(iter(var.values())))


temp={'A':[{'B':[{'D':23},{'E':43}]},{'C':44}]}
iterate_over(temp)

在任何语言中,这种形式的递归都会导致相应的递归错误,因为您不会更改传递给下一个递归调用的内容。无论传递给递归的第一级(这里是
var
),相同的值都会传递给递归的第二级,依此类推

此外,
temp['A']
基本上是一个列表,而不是字典

试试这个:

def iterate_over(var):
    if type(var) is list :
        for x in var:
            iterate_over(x)
    elif(type(var) is dict and len(var)>0):
        print (next(iter(var.values())))
        iterate_over(next(iter(var.values())))


temp={'A':[{'B':[{'D':23},{'E':43}]},{'C':44}]}
iterate_over(temp)

您得到一个递归错误,因为条件
len(var)>1
将始终计算为true,因为您没有在函数内部更新
var

我不确定您想要完成什么,但您的功能应该如下所示:

def iterate_over(var):
   if(len(var) > 1):
      return iterate_over(var[1:])
   else:
      return var

您得到一个递归错误,因为条件
len(var)>1
将始终计算为true,因为您没有在函数内部更新
var

我不确定您想要完成什么,但您的功能应该如下所示:

def iterate_over(var):
   if(len(var) > 1):
      return iterate_over(var[1:])
   else:
      return var

一般来说:如果有东西要迭代,那么迭代,不要递归。Python在迭代方面尤其出色,而在递归方面则不太出色。一般来说:如果有什么东西需要迭代,那么迭代,不要递归。Python在迭代方面尤其出色,而在递归方面则不太出色。