On 2007-02-02, ardief <[EMAIL PROTECTED]> wrote: > Hi everyone > Here is my problem: > I have a list that looks like this - > [['a', '13'], ['a', '3'], ['b', '6'], ['c', '12'], ['c', '15'], ['c', > '4'], ['d', '2'], ['e', '11'], ['e', '5'], ['e', '16'], ['e', '7']] > > and I would like to end up with something like this, i.e. with > the only one list per letter: > > [['a', ['13' '3']], ['b', '6'], ['c', ['12', '15', '4']], ['d', '2'], > ['e', ['11', '5', '16', '7']]] > > I have the feeling it's trivial, and I've scoured the group > archives - sets might be a possibility, but I'm not sure how to > operate on a list of lists with sets.
This is a job for... duhn-duhn-DAAAAH! Captain CHAOS! Er... I mean itertools.groupby. I took the liberty of not assuming the alist was sorted already. This could be a one-liner if you wanted to be evil. def bundle_alist(seq): """ Bundle together some alist tails. >>> seq = [['a', '13'], ['a', '3'], ['b', '6'], ['c', '12'], ['c', '15'], ['c', '4'], ['d', '2'], ['e', '11'], ['e', '5'], ['e', '16'], ['e', '7']] >>> bundle_alist(seq) [['a', ['13', '3']], ['b', ['6']], ['c', ['12', '15', '4']], ['d', ['2']], ['e', ['11', '5', '16', '7']]] """ from itertools import groupby def key_func(t): return t[0] groups = groupby(sorted(seq, key=key_func), key_func) seq = [] for item in groups: seq.append([item[0], [a[1] for a in item[1]]]) return seq -- Neil Cerutti Music gets more chromatic and heavy towards the end of the century. One of the popular questions of the day was, "Why?" --Music Lit Essay -- http://mail.python.org/mailman/listinfo/python-list