dict.update() useful or not?

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Mon Aug 11 19:18:20 CEST 2008

dict1.update(dict2) is of course equivalent to this code:

for key, value in dict2.iteritems():
    dict1[key] = value

Note that it replaces values in dict1 with the value taken from dict2. I 
don't know about other people, but I more often want to keep the values 
in dict1 regardless of what's in dict2, and only add items from dict2 if 
it is new key. Like this:

for key, value in dict2.iteritems():
    if not dict1.has_key(key):
        dict1[key] = value

Here's some code modified from something I wrote the other day:

import urllib2
def create_request(url, headers):
    tmp = DEFAULT_HEADERS.copy()
    req = urllib2.Request(url, None, tmp)
    # ... 
    return req

There's the faintest of code smells to me. I would prefer to write 
something like this:

def create_request(url, headers):
    req = urllib2.Request(url, None, headers)
    # ... 
    return req

but of course this second example does the Wrong Thing, replacing 
explicit headers with default values.

What do other people find? Do you find use for dict.update()? What other 
idioms do you use for combining dictionaries?


More information about the Python-list mailing list