擅长:python、mysql、java
<p>可以将递归与<code>itertools.groupby</code>一起使用:</p>
<pre><code>from itertools import groupby
data = [{"a":{"b": {"c": {"d": ["ab"]}}}}, {"a" : {"b": {"d": ["aa"]}}}, {"a": {"f":{"c":["xx"]}}}, {"a":{"b": {"c": {"d": ["ef"]}}}}]
def group(d):
if all(not isinstance(i, dict) for i in d):
return [i for b in d for i in b]
r = [i for b in d for i in b.items()]
_d = [[a, [c for _, c in b]] for a, b in groupby(sorted(r, key=lambda x:x[0]), key=lambda x:x[0])]
return {a:b[0] if len(b) == 1 else group(b) for a, b in _d}
print(group(data))
</code></pre>
<p>输出:</p>
<pre><code>{'a': {'b': {'c': {'d': ['ab', 'ef']}, 'd': ['aa']}, 'f': {'c': ['xx']}}}
</code></pre>