On Aug 15, 8:08 am, Ant <[EMAIL PROTECTED]> wrote: > On Aug 15, 3:30 am, [EMAIL PROTECTED] 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! -- http://mail.python.org/mailman/listinfo/python-list