[Tutor] adding dictionary values

Chris Fuller cfuller084 at thinkingplanet.net
Fri Mar 20 13:56:27 CET 2009


You should iterate over the keys of the dictionary:
for k in a.keys():
because if you iterate over the full dictionary, your items are the values, 
not the keys.  Otherwise your code looks correct, and I don't think its 
terribly bad form.  You could do something interesting with sets:
sa = set(a.keys())
sb = set(b.keys())

The next step could be a for loop, but if you enjoy terseness and taking 
advantage of language features (also should be faster for big enough dicts):
c = dict( \
   [(k, a[k]+b[k]) for k in sa&sb ] + \
   [(k, a[k]) for k in sa-sb ] + \
   [(k, b[k]) for k in sb-sa ]
)

which creates a new dict from a list of key, value pairs.  The list is a sum 
of three lists:  those keys in both a and b, those only in a, and those only 
in b.

Cheers

On Friday 20 March 2009 10:11, Emad Nawfal wrote:
> Hi Tutors,
> I have two pickled dictionaries containing word counts from two different
> corpora. I need to add the values, so that a word count is the sum of both.
> If the word "man" has a count of 2 in corpus A and a count of 3 in corpus
> B, then I need a new dictionary that  has "man": 5. Please let me know
> whether the following is correct/incorrect, good/bad, etc.
> Your help appreciated:
>
> def addDicts(a, b):
>     c = {}
>     for k in a:
>         if k not in b:
>             c[k] = a[k]
>         else:
>             c[k] = a[k] + b[k]
>
>     for k in b:
>         if k not in a:
>             c[k] = b[k]
>     return c
>
> # test this
> dict1 = {"dad": 3, "man": 2}
> dict2 = {"dad": 5, "woman": 10}
> newDict = addDicts(dict1, dict2)
> print(newDict)
> # This gives
>
> {'dad': 8, 'woman': 10, 'man': 2}


More information about the Tutor mailing list