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/ -- http://mail.python.org/mailman/listinfo/python-list