[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