擅长:python、mysql、java
<p>这里有一个快速而肮脏的解决方案:</p>
<pre><code>d_level1 = {"a":1,"b":2,"c":3}
d_level2 = {"group_1":{"a":1}, "group_2":{"b":2,"c":3}}
d_level3 = {"collection_1":d_level2}
def flatten(d_in, base=()):
for k in d_in:
if type(d_in[k]) == dict:
flatten(d_in[k], base+(k,))
else:
print(base + (k, d_in[k]))
flatten(d_level1)
# ('a', 1)
# ('b', 2)
# ('c', 3)
flatten(d_level2)
#('group_1', 'a', 1)
#('group_2', 'b', 2)
#('group_2', 'c', 3)
flatten(d_level3)
# ('collection_1', 'group_1', 'a', 1)
# ('collection_1', 'group_2', 'b', 2)
# ('collection_1', 'group_2', 'c', 3)
</code></pre>
<p>注意!!Python的递归限制约为1000!因此,在python中使用递归时,要非常仔细地考虑您要做什么,并准备好在调用这样的递归函数时捕获运行时错误</p>
<p>编辑:
通过评论,我意识到我犯了一个错误,没有将键添加到level1 dict输出,并且使用了可变结构作为默认参数。我在打印报表中添加了这些和参数,并重新发布。现在,输出与OP所需的输出相匹配,并使用更好、更现代的python</p>