2012-07-22 35 views
8

Estoy imprimiendo algunas listas pero los valores no están ordenados.ordenar múltiples listas basadas en una sola lista en python

for f, h, u, ue, b, be, p, pe, m, me in zip(filename, human_rating, rating_unigram, percentage_error_unigram, rating_bigram, percentage_error_bigram, rating_pos, percentage_error_pos, machine_rating, percentage_error_machine_rating): 
     print "{:>6s}{:>5.1f}{:>7.2f}{:>8.2f} {:>7.2f} {:>7.2f} {:>7.2f} {:>8.2f} {:>7.2f} {:>8.2f}".format(f,h,u,ue,b,be,p,pe,m,me) 

¿Cuál es la mejor manera de ordenar todas estas listas según los valores en 'nombre de archivo'?

Así que si:

filename = ['f3','f1','f2'] 
human_rating = ['1','2','3'] 
etc. 

A continuación, la clasificación devolvería:

filename = ['f1','f2','f3'] 
human_rating = ['2','3','1'] 
etc. 

Respuesta

8

Me zip y luego ordenar:

zipped = zip(filename, human_rating, …) 
zipped.sort() 
for row in zipped: 
    print "{:>6s}{:>5.1f}…".format(*row) 

Si usted realmente desea conseguir las listas individuales de regreso, Los clasificaría como arriba, luego descomprímalos:

filename, human_rating, … = zip(*zipped) 
+0

Python 3 Nota: postal devuelve un iterador en Python 3, lista de uso para ver su contenido, ' zipped = list (zip (filename, human_rating, ...)) ' –

0

zip devuelve una lista de tuplas que puede ordenar por su primer valor. Por lo tanto:

for ... in sorted(zip(...)): 
    print " ... " 
2

¿Qué tal esto: zip en una lista de tuplas, ordenar la lista de tuplas, a continuación, "descomprimir"?

l = zip(filename, human_rating, ...) 
l.sort() 
# 'unzip' 
filename, human_rating ... = zip(*l) 

O en una sola línea:

filename, human_rating, ... = zip(*sorted(zip(filename, human_rating, ...))) 

de ejecución de la muestra:

foo = ["c", "b", "a"] 
bar = [1, 2, 3] 
foo, bar = zip(*sorted(zip(foo, bar))) 
print foo, "|", bar # prints ('a', 'b', 'c') | (3, 2, 1) 
Cuestiones relacionadas