擅长:python、mysql、java
<p>下面是一个几乎完全基于<a href="https://stackoverflow.com/a/6027615/771848">"recursive"-approach answer</a>的解决“压平字典”问题的方法:</p>
<pre><code>import collections
def flatten(d, parent_key='', sep=' '):
items = []
for k, v in d.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, collections.MutableMapping):
items.extend(flatten(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
</code></pre>
<p>用法:</p>
<pre><code>$ ipython -i test.py
In [1]: D = {"America": {"Washington": {"Seattle": ('park', 'museum'), "Kent": ("market",)},
...: 'Colorado': {"Boulder": ("hiking",)}}}
In [2]: for key, values in flatten(D, sep=" ").items():
...: for value in values:
...: print(key + " " + value)
...:
America Washington Seattle park
America Washington Seattle museum
America Colorado Boulder hiking
America Washington Kent market
</code></pre>
<p>这种方法的一个最大优点是它是可伸缩的,它适用于字典的不同深度。你知道吗</p>