2016-05-14 18 views
1

Ich versuche, eine Operation für eine Datei auszuführen und ihre Zeilen in eine Liste umzuwandeln. Die Integer-Werte werden jedoch auch als String genommenListe der Listen nach spezifischem Index der inneren Liste sortieren

l1 = [['test', 'hello', '60,'], ['why', 'to', '500,'], ['my', 'choice', '20,']] 

deshalb kann ich die Liste der Liste basierend auf diesen ganzzahligen Werten nicht sortieren.

Gibt es eine Möglichkeit, all diese list[2] Werte in Ganzzahl zu konvertieren und die äußere Liste basierend darauf zu sortieren? Oder jede andere Möglichkeit, über die ich diese Liste mit ganzen Zahlen in der obigen Liste sortieren kann.

Beabsichtigte Ergebnis ist, Ausgabe der sortierten Liste soll zeigen, wie:

[['my', 'choice', '20,'], ['test', 'hello', '60,'], ['why', 'to', '500,']] 

Antwort

1

einen benutzerdefinierten Sortierschlüssel verwenden, das letzte Element in eine Ganzzahl nur umzuwandeln, wenn Reihenfolge:

sorted(l1, key=lambda l: int(l[2].rstrip(','))) 

Die key wird verwendet, um den Wert, nach dem sortiert werden soll, für jedes Element in der Liste zu erzeugen. So wird die lambda-Funktion für jedes Element aufgerufen, und der obige Code extrahiert den l[2]-Wert und konvertiert ihn in eine ganze Zahl. Der Aufruf str.rstrip() entfernt das nachfolgende Komma zuerst.

Demo:

>>> l1 = [['test', 'hello', '60,'], ['why', 'to', '500,'], ['my', 'choice', '20,']] 
>>> sorted(l1, key=lambda l: int(l[2].rstrip(','))) 
[['my', 'choice', '20,'], ['test', 'hello', '60,'], ['why', 'to', '500,']] 
+0

Vielen Dank, es funktioniert :) // eine weitere Abfrage, sortiert nun diese die Liste in aufsteigender Reihenfolge, was Sortierung nach absteigender Reihenfolge zu tun? – Zoro99

+0

@ Zoro99: füge "reverse = True" zum 'sorted()' Aufruf hinzu. –

+0

awsome .. danke nochmal! – Zoro99

Verwandte Themen