[Patches] [ python-Patches-1391204 ] dict.merge

SourceForge.net noreply at sourceforge.net
Tue Dec 27 14:00:13 CET 2005


Patches item #1391204, was opened at 2005-12-27 14:00
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1391204&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Nicolas Lehuen (nlehuen)
Assigned to: Nobody/Anonymous (nobody)
Summary: dict.merge

Initial Comment:
If you want to update a dictionary with another one,
you can simply use update :

a = dict(a=1,c=3)
b = dict(a=0,b=2)
a.update(b)
assert a == dict(a=0,b=2,c=3)

However, sometimes you want to merge the second dict
into the first, all while keeping the values that are
already defined in the first. This is useful if you
want to insert default values in the dictionary without
overriding what is already defined.

Currently this can be done in a few different ways, but
all are awkward and/or inefficient :

a = dict(a=1,c=3)
b = dict(a=0,b=2)

Method 1:
for k in b:
    if k not in a:
        a[k] = b[k]

Method 2:
temp = dict(b)
temp.update(a)
a = temp

This patch adds a merge() method to the dict object,
with the same signature and usage as the update()
method. Under the hood, it simply uses PyDict_Merge()
with the override parameter set to 0 instead of 1.
There's nothing new, therefore : the C API already
provides this functionality (though it is not used in
the dictobject.c scope), so why not expose it ? The
result is :

a = dict(a=1,c=3)
b = dict(a=0,b=2)
a.merge(b)
assert a == dict(a=1,b=2,c=3)



----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1391204&group_id=5470


More information about the Patches mailing list