擅长:python、mysql、java
<p>您可以使用<code>itertools.groupby</code>和递归:</p>
<pre><code>import itertools, sys
a = {"name": "john", "phone":"123123123", "owns": {"cars": "Car 1", "motorbikes": "Motorbike 1"}}
b = {"name": "john", "phone":"123", "owns": {"cars": "Car 2"}}
def condense(r):
return r[0] if len(set(r)) == 1 else r
def update_dict(c, d):
_v = {j:[c for _, c in h] for j, h in itertools.groupby(sorted(list(c.items())+list(d.items()), key=lambda x:x[0]), key=lambda x:x[0])}
return {j:update_dict(*e) if all(isinstance(i, dict) for i in e) else condense(e) for j, e in _v.items()}
print(update_dict(a, b))
</code></pre>
<p>输出:</p>
^{pr2}$