递归打印错误python中嵌套的dict()对象

递归打印错误python中嵌套的dict()对象,python,recursion,dictionary,iteration,Python,Recursion,Dictionary,Iteration,让我们简单一点。 代码: 产出: k : {'d': {'a': 'aa'}, 'b': {'a': 'aa'}} d : {'a': 'aa'} a : aa b : None Traceback (most recent call last): File "test.py", line 13, in <module> print_rec(level1) File "test.py", line 11, in print_rec print_rec(node

让我们简单一点。
代码:

产出:

k : {'d': {'a': 'aa'}, 'b': {'a': 'aa'}}
d : {'a': 'aa'}
a : aa
b : None
Traceback (most recent call last):
  File "test.py", line 13, in <module>
    print_rec(level1)
  File "test.py", line 11, in print_rec
    print_rec(node)
  File "test.py", line 11, in print_rec
    print_rec(node)
  File "test.py", line 8, in print_rec
    for key in node:
TypeError: 'NoneType' object is not iterable
k:{'d':{'a':'aa'},'b':{'a':'aa'}
d:{'a':'aa'}
a:aa
b:没有
回溯(最近一次呼叫最后一次):
文件“test.py”,第13行,在
打印记录(1级)
文件“test.py”,第11行,打印记录
打印记录(节点)
文件“test.py”,第11行,打印记录
打印记录(节点)
文件“test.py”,第8行,打印记录
对于密钥输入节点:
TypeError:“非类型”对象不可编辑

我认为node=node.get(key)只有在key位于node时才会执行。那么为什么新节点会得到一个非类型呢?任何人都可以提供帮助?

在for循环中,似乎您正在使用名称
节点来实现两个不同的功能:

for key in node:                                                            
    print(key,":",node.get(key))                                            
    node = node.get(key)                                                    
    print_rec(node)
在第一次迭代中,更改
节点的值。在第二次迭代中,当您执行
节点.get(key)
时,您使用的是新的
节点
,但您希望使用原始的
节点

这将有助于:

for key in node:
    print(key,":",node.get(key))
    successor = node.get(key)
    print_rec(successor)
它可以写得更简洁,如下所示:

for key, successor in node.items():
    print(key,":",successor)
    print_rec(successor)

在for循环中,似乎您正在使用名称
节点
来表示两种不同的内容:

for key in node:                                                            
    print(key,":",node.get(key))                                            
    node = node.get(key)                                                    
    print_rec(node)
在第一次迭代中,更改
节点的值。在第二次迭代中,当您执行
节点.get(key)
时,您使用的是新的
节点
,但您希望使用原始的
节点

这将有助于:

for key in node:
    print(key,":",node.get(key))
    successor = node.get(key)
    print_rec(successor)
它可以写得更简洁,如下所示:

for key, successor in node.items():
    print(key,":",successor)
    print_rec(successor)

谢谢,它很有效。你能告诉我为什么“node=node.get(key)”会导致意外的结果吗?如果副本很浅,我可以将“节点”视为指针吗?如果是这样,我想,“node=node.get(key)”就可以了。我已经添加了一个解释。谢谢。我用一个默认参数对它进行了修改,这样当我将这个方法封装在一个类中时,用户可以在不访问私有字段的情况下调用它。我想知道是否有更简洁的方法来实现这一点?在某些情况下,如果递归返回一个None,我想我的方法可能会导致一个无限循环。我不明白你在问什么。如果您需要这方面的帮助,只需创建一个新问题:)谢谢,它很有效。你能告诉我为什么“node=node.get(key)”会导致意外的结果吗?如果副本很浅,我可以将“节点”视为指针吗?如果是这样,我想,“node=node.get(key)”就可以了。我已经添加了一个解释。谢谢。我用一个默认参数对它进行了修改,这样当我将这个方法封装在一个类中时,用户可以在不访问私有字段的情况下调用它。我想知道是否有更简洁的方法来实现这一点?在某些情况下,如果递归返回一个None,我想我的方法可能会导致一个无限循环。我不明白你在问什么。如果您需要这方面的帮助,只需创建一个新问题:)