擅长:python、mysql、java
<p>从逻辑上讲,嵌套字典(和列表)是一种递归,所以如果你想避免逻辑递归,那是不可能的。在</p>
<p>但是,由于递归只是递归,您可以保留自己的堆栈并在循环中模拟它:</p>
<pre><code>def flatten(dct, c=None):
if c is None:
c = []
stack = [dct]
while stack: # non-empty
d = stack.pop()
for k, v in d.items():
c.append(k)
if v:
stack.append(v)
return c
</code></pre>
<p>这个函数很好地模拟了函数递归的行为,有一个自定义堆栈。在</p>
<p>有一个潜在的缺点:理论上,字典</p>
^{pr2}$
<p>应展平为<code>[1, 2, 3, 4, 5]</code>,而此方法将给出<code>[1, 2, 5, 3, 4]</code>。这很像DFS搜索与BFS在图形上的搜索。在</p>
<p><strong>但是</strong>,因为字典是无序的,这应该不是什么大问题(除非您使用<code>collections.OrderedDict</code>),这就是为什么我说这是一个潜在的</em>缺点。在</p>