Deep merge two dicts?

nbvfour at gmail.com nbvfour at gmail.com
Fri Apr 13 11:02:56 EDT 2012


On Thursday, April 12, 2012 5:54:47 PM UTC-4, Kiuhnm wrote:
> On 4/12/2012 19:59, John Nagle 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)
> 
> There are a few problems with that code:
> 1) you don't make sure that b[k] is a dict so
>         a={'a':{'b':1}}; b={'a':1}
>     make it crash.
> 2) the last update overwrites nested updates, but this could be the 
> intended behavior.
> For instance, with the 'a' and 'b' above, the result would be
>      {'a':1}
> 
> Kiuhnm

I guess it's reasonable that if a user wants to merge two dicts, the two dicts should have the same structure. This kind of thing I've used before to merge two logging config dictionaries: https://docs.djangoproject.com/en/dev/topics/logging/#an-example



More information about the Python-list mailing list