[Tutor] nested list help

Gerard Flanagan grflanagan at gmail.com
Tue Jul 27 21:03:17 CEST 2010


Vikram K wrote:
> Suppose i have this nested list:
> 
>  >>> x
> [['NM100', 3, 4, 5, 6, 7], ['NM100', 10, 11, 12, 13], ['NM200', 15, 16, 17]]
>  >>> for i in x:
> ...   print i
> ...
> ['NM100', 3, 4, 5, 6, 7]
> ['NM100', 10, 11, 12, 13]
> ['NM200', 15, 16, 17]
>  >>>
> 
> how do i obtain from the above the following nested list:
> 
>  >>> z
> [['NM100', 3, 4, 5, 6, 7, 10, 11, 12, 13], ['NM200', 15, 16, 17]]
>  >>> for i in z:
> ...   print i
> ...
> ['NM100', 3, 4, 5, 6, 7, 10, 11, 12, 13]
> ['NM200', 15, 16, 17]
>  >>>
> 


z = [['NM100', 3, 4, 5, 6, 7], ['NM100', 10, 11, 12, 13], ['NM200', 15, 
16, 17]]

from itertools import groupby

# assumes that the data is already sorted by the first element as it is here
# if not then you must sort, eg. with the same function you group by:
# z.sort(key=lambda X: X[0])
# also assumes that there are no empty lists

def merge(inlist):
     for k, g in groupby(inlist, lambda X: X[0]):
         k = [k]
         for item in g:
             k.extend(item[1:])
         yield k

print list(merge(z))

[['NM100', 3, 4, 5, 6, 7, 10, 11, 12, 13], ['NM200', 15, 16, 17]]

def merge(inlist):
     for k, g in groupby(inlist, lambda X: X[0]):
         newlist = []
         for item in g:
             newlist.extend(item[1:])
         yield k, newlist

print dict(merge(z))

{'NM100': [3, 4, 5, 6, 7, 10, 11, 12, 13], 'NM200': [15, 16, 17]}



More information about the Tutor mailing list