On Thu, Apr 12, 2012 at 11:59 AM, John Nagle <na...@animats.com> wrote: > On 4/12/2012 10:41 AM, Roy Smith wrote: >> >> Is there a simple way to deep merge two dicts? I'm looking for Perl's >> Hash::Merge (http://search.cpan.org/~dmuey/Hash-Merge-0.12/Merge.pm) >> in Python. > > > def dmerge(a, b) : > for k in a : > v = a[k] > if isinstance(v, dict) and k in b: > dmerge(v, b[k]) > a.update(b)
That doesn't work. After b[k] is recursively merged into a[k], the call "a.update(b)" copies b[k] into a[k], discarding the merged dict. Try this: def dmerge(a, b): for k, v in b.items(): if isinstance(v, dict) and k in a: dmerge(a[k], v) else: a[k] = v Hash::Merge also does a lot more than this, but I'm not sure exactly which functionality the OP is looking for. -- http://mail.python.org/mailman/listinfo/python-list