You can just flatten the list using itertools and collate the results using defaultdict:
import itertools from collections import defaultdict sequence = ((0,'a','b'),(1,'c','d'),(2,'e','f'),(3,'g','h'),(1,'i','j'),(2,'k','l'),(4,'m','n'),(2,'o','p'),(4,'q','r'),(5,'s','t')) # flatten the list to (0,'a','b',1,'c','d'... chain = itertools.chain.from_iterable(sequence) # use defaultdict to set up the final list and deal with initial empty dictionary key final_list = defaultdict(list) for i in chain: if isinstance(i, int): number = i else: final_list[number].append(i) print (final_list.items()) HTH, Nick On Sunday, September 26, 2010 2:05:13 PM UTC+10, Xah Lee wrote: > here's a interesting toy list processing problem. > > I have a list of lists, where each sublist is labelled by > a number. I need to collect together the contents of all sublists > sharing > the same label. So if I have the list > > ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q > r) (5 s t)) > > where the first element of each sublist is the label, I need to > produce: > > output: > ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t)) > > a Mathematica solution is here: > http://xahlee.org/UnixResource_dir/writ/notations_mma.html > > R5RS Scheme lisp solution: > http://xahlee.org/UnixResource_dir/writ/Sourav_Mukherjee_sourav.work_gmail.scm > by Sourav Mukherjee > > also, a Common Lisp solution can be found here: > http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/5d1ded8824bc750b? > > anyone care to give a solution in Python, Perl, javascript, or other > lang? am guessing the scheme solution can be much improved... perhaps > using some lib but that seems to show scheme is pretty weak if the lib > is non-standard. > > Xah ∑ xahlee.org ☄ -- http://mail.python.org/mailman/listinfo/python-list