2012-07-22 17 views
8

Ich drucke ein paar Listen, aber die Werte sind nicht sortiert.Sortierung mehrerer Listen basierend auf einer einzigen Liste in 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) 

Was ist der beste Weg, alle diese Listen basierend auf den Werten in ‚Dateiname‘ zu sortieren?

Also, wenn:

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

Dann würde zurückkehren Sortierung:

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

Antwort

8

Ich würde dann sortieren Zip:

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

Wenn Sie wirklich die einzelnen Listen zurück erhalten möchten, Ich würde sie wie oben sortieren, dann entzippen sie:

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

Python 3 note: zip gibt einen Iterator in Python 3, Verwendung Liste ihren Inhalt zu sehen, ' zipped = Liste (zip (Dateiname, human_rating, ...)) ' –

0

zip gibt eine Liste der Tupel zurück, die nach ihrem ersten Wert sortiert werden können. Also:

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

Wie wäre es damit: zip in eine Liste von Tupeln, sortieren Sie die Liste von Tupeln, dann „entpacken“?

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

Oder in einer Zeile:

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

Probelauf:

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) 
Verwandte Themen