creating and appending to a dictionary of a list of lists
pyscottishguy at hotmail.com
pyscottishguy at hotmail.com
Wed Aug 15 08:57:39 EDT 2007
On Aug 15, 8:08 am, Ant <ant... at gmail.com> wrote:
> On Aug 15, 3:30 am, pyscottish... at hotmail.com wrote:
>
> > Hey,
>
> > I started with this:
>
> > factByClass = {}
>
> ...
> > def update(key, *args):
> > x = factByClass.setdefault(key, [[], [], [], [] ])
> > for i, v in enumerate(args):
> > x[i].append(v)
>
> > Is there a better way?
>
> Well, the following is perhaps neater:
>
> >>> factByClass = defaultdict(lambda: [[],[],[],[]])
> >>> def update(key, *args):
>
> ... map(list.append, factByClass[key], args)
> ...>>> update('one', 1, 2, 3, 4)
> >>> update('one', 5, 6, 7, 8)
> >>> update('two', 9, 10, 11, 12)
>
> >>> print factByClass
>
> defaultdict(<function <lambda> at 0x00F73430>, {'two': [[9], [1
> 0], [11], [12]], 'one': [[1, 5], [2, 6], [3, 7], [4, 8]]})
>
> It abuses the fact that list.append modifies the list in place -
> normally you would use map to get a new list object. In this case the
> new list returned by map is just a list of None's (since append
> returns None - a common idiom for functions that operate by side
> effect), and so is not used directly.
>
> --
> Ant...
>
> http://antroy.blogspot.com/
Nice. I like it. Thanks a lot!
More information about the Python-list
mailing list