擅长:python、mysql、java
<p>与其将dict保存在堆栈中,不如将项的迭代器保存在堆栈中。在</p>
<p>这样,您就可以恢复iterator on命令。在</p>
<p>另外,由于您要按顺序暂停和恢复迭代器的执行,因此结果将始终与dict的顺序一致</p>
<p>顺便说一下,@iBug,dict是根据Python 3.7的规范进行排序的</p>
<pre><code>def flatten(dictionary, container=None):
if container is None:
container = []
iterators = []
iterator = iter(dictionary.items())
while True:
for k, v in iterator:
container.append(k)
if v:
# Save the current iterator for later
iterators.append(iterator)
# Run on the new dict
iterator = iter(v.items())
break
# Current iterator is done, fetch the next one
else:
try:
iterator = iterators.pop()
except IndexError:
return container
print(flatten({1: None, 2: {3: None, 4: None}, 5: None}))
[1, 2, 3, 4, 5]
</code></pre>