擅长:python、mysql、java
<p>假设您的值是<em>始终</em>字典,您可以使用:</p>
<pre><code>def paths(d, path=(), res=None):
if res is None:
res = []
for key, value in d.iteritems():
if not value:
# end of the line, produce path
res.append(','.join(path + (key,)))
else:
# recurse down to find the end of this path
paths(value, path + (key,), res)
return res
</code></pre>
<p>这将使用一个共享列表(在第一次调用时生成)将生成的路径传递回调用方,并为每个递归步骤构建一个路径,以便在遇到空值时将其添加到结果列表中。你知道吗</p>
<p>演示:</p>
<pre><code>>>> dict_of_dicts = {'a': {'b': {'c': {}, 'd': {}, 'e': {}}}, 'f': {'g': {}}}
>>> paths(dict_of_dicts)
['a,b,c', 'a,b,e', 'a,b,d', 'f,g']
</code></pre>
<p>路径没有排序,因为字典没有顺序;如果需要,您仍然可以按键排序:</p>
<pre><code>for key in sorted(d):
value = d[key]
</code></pre>
<p>而不是<code>for key, value in d.iteritems()</code>循环。你知道吗</p>