2011-03-12 13 views
8

Tengo una lista que está llena de elementos HTML. También tengo una lista llena de fecha/hora, que es paralela a la lista HTML.Python: lista de ordenación con lista paralela

¿Cómo puedo ordenar la lista HTML en función de la lista de hora/fecha? La hora/fecha está en formato de marca de tiempo.

Respuesta

15

Puede utilizar zip.

timestamps, elements = zip(*sorted(zip(timestamps, elements))) 

El resultado será de dos tuplas que puede convertir a listas si lo prefiere.

+0

¿Cómo no sé sobre 'ordenó' ?! ¡Gracias! – Thomas

+0

@Thomas - ¡No te sientas mal! 'sort()' está en el lugar, mientras que 'sorted()' crea una nueva lista, por lo que 'sort()' típicamente es lo que quieres para listas grandes de todos modos. :-) –

+0

Gracias. ¿Qué tal al revés? – Zeno

7

Zip las dos listas para arriba en tuplas, clasificar, a continuación, tomar el código HTML de nuevo fuera de la tupla:

zipped = zip(timestamps, htmls) 
zipped.sort() 
sorted_htmls = [html for (timestamp, html) in zipped] 
2

Enumerar le dará una lista de tuplas (índice, artículo) para cada elemento de la lista. Puede ordenar esto usando el índice para leer la clave de clasificación de la lista de marcas de tiempo. A continuación, despegue los elementos html:

sorted_elems = [elem for i,elem in sorted(enumerate(html_elements), 
              key=lambda x:timestamps[x[0]])] 

¿Qué podría ser más simple?

0

Puede utilizar un paquete de terceros llamado more_itertools:

import more_itertools 

timestamps = ["08-11-17", "01-13-17", "11-22-17"] 
elements = ["<p>", "<b>", "<a href>"] 
more_itertools.sort_together([timestamps, elements]) 
# [('01-13-17', '08-11-17', '11-22-17'), ('<b>', '<p>', '<a href>')] 

Ver more_itertools docs para más información.