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