classificando várias listas com base em uma única lista em python

Estou imprimindo algumas listas, mas os valores não estão classificados.

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) 

Qual é a melhor maneira de classificar todas essas listas com base nos valores em ‘filename’?

Então se:

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

Então, a sorting retornaria:

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

Eu zip então ordeno:

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

Se você realmente quiser recuperar as listas individuais, classificá-las como acima e descompactá-las:

 filename, human_rating, … = zip(*zipped) 

Que tal isso: zip em uma lista de tuplas, classificar a lista de tuplas e, em seguida, “descompactar”?

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

Ou em uma linha:

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

Amostra executado:

 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 retorna uma lista de tuplas que você pode classificar por seu primeiro valor. Assim:

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