building a dict

Steve Holden steve at holdenweb.com
Sat Mar 13 10:36:46 EST 2010


vsoler wrote:
> Say that "m" is a tuple of 2-tuples
> 
> m=(('as',3), ('ab',5), (None, 1), ('as',None), ('as',6))
> 
> and I need to build a "d" dict where each key has an associated list
> whose first element is the count, and the second is the sum. If a 2-
> tuple contains a None value, it should be discarded.
> 
> The expected result is:
> d={'as':[2, 9], 'ab': [1,5]}
> 
> How should I proceed? So far I have been unsuccessful. I have tried
> with a "for" loop.
> 
> Thank you for your help

Here's a fairly simple-minded approach using a defaultdict, which calls
the dflt() function to create a value when the key is absent.

>>> from collections import defaultdict
>>> def dflt():
...     return [0, 0]
...
>>> m = (('as',3), ('ab',5), (None, 1), ('as',None), ('as',6))
>>> d = defaultdict(dflt)
>>> for key, n in m:
...   if key is not None and n is not None:
...     c, t = d[key]
...     d[key] = [c+1, t+n]
...
>>> d
defaultdict(<function dflt at 0x7f0bcb1b0ed8>,
{'as': [2, 9], 'ab': [1, 5]})
>>>

regards
 Steve
-- 
Steve Holden           +1 571 484 6266   +1 800 494 3119
See PyCon Talks from Atlanta 2010  http://pycon.blip.tv/
Holden Web LLC                 http://www.holdenweb.com/
UPCOMING EVENTS:        http://holdenweb.eventbrite.com/




More information about the Python-list mailing list