ordenar listas múltiples basadas en una sola lista en Python

Estoy imprimiendo algunas listas pero los valores no están ordenados.

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. 

Entonces la clasificación volvería:

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

Yo comprimiría y ordenaría

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

Si realmente desea recuperar las listas individuales, las clasificaría como se indica arriba, luego las descomprimiré:

 filename, human_rating, … = zip(*zipped) 

¿Qué tal esto: zip una lista de tuplas, ordene la lista de tuplas, luego “descomprima”?

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

O en una línea:

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

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) 

zip devuelve una lista de tuplas que puede ordenar por su primer valor. Asi que:

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