2016-04-04 4 views
1

ich in Python lesen ein Protokoll, das Namen, Speicher enthält, ncalls für jede Zeile und diese Liste als Tupel speichern, wobei jedes Element ist ein Tupel (Name, Speicher, ncalls) manchmal müssen Sie die Liste nach Namen anderen Zeiten nach Speicher oder ncalls sortieren. Das Problem, wenn ich einfach den Code verwendenWerte als String sortiert, aber ich möchte, dass sie als Zahl sortieren in Python

mylist=sorted(mylist, key=itemgetter(2)) 

die Liste sortiert wird, um die gewünschten Parameter verwenden, aber Python den Parameter wie ein String betrachten und ich dieses Ergebnis

item3, 45, 1 
item1, 4, 12 
item4, 65, 3 
item2, 65, 5 

das gewünschte Ergebnis wäre

item3, 45, 1 
item4, 65, 3 
item2, 65, 5 
item1, 4, 12 

weil 3 und 5 sind kleiner als 12

Wie kann ich das lösen, ohne die Art und Weise zu ändern, wie ich die Liste speichere?

+0

Warum übernimmt String Sortierung dass '12' größer als' 3' ist? – Selcuk

+1

Bitte benennen Sie Ihre Variable um - 'list' ist eine eingebaute Funktion und Sie überschreiben es mit' list = sorted (...) ' – soon

+1

Ihre Ausgabe schlägt vor:' itemgetter (2)) 'bedeutet nicht jede letzte Zahl in Ihrer Eingabe, wie Selcuk schlägt 3 würde nicht vor 12 kommen –

Antwort

3

Eine Lösung ist der Schlüssel als Lambda zu definieren, das dritte Element Umwandlung in int:

sorted_data = sorted(list, key=lambda t: int(t[2])) 
+2

Gute Antwort, aber bitte nicht Liste als Variablenname verwenden. – Rob

Verwandte Themen