[pyar] Lista agrupada

Ale peralta.alejandro en gmail.com
Vie Sep 23 18:32:12 ART 2011


El 23 de septiembre de 2011 17:53, Daniel Moisset
<dmoisset en machinalis.com>escribió:

>
>
> 2011/9/23 Daniel <dmlistapython en gmail.com>
>
>> Necesito ayuda con un algoritmo al que no encuentro
>> una forma pythonica de encararlo.
>>
>> Tengo una lista de listas, desordenada
>> ejemplo no real (porque las listas son largas)
>>
>> [
>>  [auto, DAL399, alvarez],
>>  [moto, 393DSR, gomez],
>>  [auto, SFT320, perez],
>>  [auto, DSL598, gomez]
>> ]
>> y necesitaría recorrerla agrupada, algo así
>>
>> [gomez]
>>      [auto, DSL598],
>>      [moto, 393DSR]
>> [alvarez]
>>      [auto, DAL399]
>> [perez]
>>      [auto, SFT320]
>>
>>
>> Originalmente es un archivo CVS, así que si se les ocurre otra manera que
>> no sea con listas bienvenida la idea....
>>
>
> Esto es casi lo mismo que te dijo otra gente, pero a mi criterio mas
> legible
>
> import collections
> vehiculos = collections.defaultdict(list)
> for tipo, chapa, dueno in lista:
>     vehiculos[dueno].append ((tipo, chapa))
>
> despues podes recorrer con:
>
> for dueno in vehiculos:
>    hacer algo con vehiculos[dueno], por ejemplo
>    for tipo, chapa in vehiculos[dueno]:
>       print dueno, tipo, chapa
>
> Saludos,
>    D.
>

Puedo dar mi versión, puedo, puedo??? :-P  Medio funcional...

iIn [1]: import operator

In [2]: igetter = operator.itemgetter(2)

In [3]: mylist = [ ["auto", "DAL399", "alvarez"],  ["moto", "393DSR",
"gomez"], ["auto", "SFT320", "perez"], ["auto", "DSL598", "gomez"]]

In [4]: imimport operator

In [2]: igetter = operator.itemgetter(2)

In [3]: mylist = [ ["auto", "DAL399", "alvarez"],  ["moto", "393DSR",
"gomez"], ["auto", "SFT320", "perez"], ["auto", "DSL598", "gomez"]]

In [4]: import itertools

In [5]: for k, g in itertools.groupby(sorted(mylist, key=igetter), igetter):
k, list(g)
   ...:
Out[9]: ('alvarez', [['auto', 'DAL399', 'alvarez']])
Out[9]: ('gomez', [['moto', '393DSR', 'gomez'], ['auto', 'DSL598',
'gomez']])
Out[9]: ('perez', [['auto', 'SFT320', 'perez']])



-- 
Ale.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110923/3e94fcee/attachment.html>


More information about the pyar mailing list