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} _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor