2017-02-20 11 views
1

Ich habe eine Liste von Listen von Listen in Python. Ich muss die höchste Liste von Listen basierend auf einem der Werte in den niedrigsten Ebenen sortieren.Liste der Listen von Listen sortieren Python

Für ein Spielzeugmodell, meine Liste zuerst mit Liste erstellt wird small, die eine Liste Listen mit drei Elementen mit jeweils ist:

small = [["dog", 5, 6], ["cat", 391, 130], ["pig", 45, 2]...]` 

Dann gibt es eine größere Liste, large, wird diese durch Anhängen erstellt die kleine Liste und andere Artikel zusammen:

large.append([["category 1"], small])` 

Dies wird in einer Schleife durchgeführt, so dass, wenn die Schleife einen Zähler von 5 hat, wird es durch eine Funktion gehen, die eine Liste small 5 Mal erstellt, jedes Mal, Anfügen es zu li st large.

Mein Ziel ist es, die endgültige Liste basierend auf einem Element in der kleinsten Liste (die Liste, die die Liste small umfasst) zu sortieren. Ich drucke gerade die large Liste Zeile für Zeile, mit der Liste von index 1 der Listen innerhalb bestellt (siehe: 5,10,15 in Reihenfolge, 1,3,6 in Reihenfolge, etc), so meine Ausgabe das ist:

>category 1: 
    >['Dog', 5, 6] 
    >['Pig', 10, 2] 
    >['Cat', 15, 130] 
    >['Buffalo', 20, 1] 
    >['Newt', 25, 45] 

    >category 2: 
    >['Newt', 1, 1092] 
    >['Cat', 3, 352] 
    >['Pig', 6, 34] 
    >['Buffalo', 9, 12] 
    >['Dog', 12, 5] 

    >category 3: 
    >['Buffalo', 2, 12] 
    >['Pig', 4, 37] 
    >['Cat', 6, 34] 
    >['Newt', 8, 150] 
    >['Dog', 10, 52] 

Allerdings würde ich die large Liste in der Reihenfolge der kleinsten drucken möchte am größten, wenn an dem Element in index 1 in der Liste suchen, die kleinste Array bildet. Also mein idealer Ausgang wäre dies:

>category 2: 
    >['Newt', 1, 1092] 
    >['Cat', 3, 352] 
    >['Pig', 6, 34] 
    >['Buffalo', 9, 12] 
    >['Dog', 12, 5] 

    >category 3: 
    >['Buffalo', 2, 12] 
    >['Pig', 4, 37] 
    >['Cat', 6, 34] 
    >['Newt', 8, 150] 
    >['Dog', 10, 52] 

    >category 1: 
    >['Dog', 5, 6] 
    >['Pig', 10, 2] 
    >['Cat', 15, 130] 
    >['Buffalo', 20, 1] 
    >['Newt', 25, 45] 

Ich habe versucht, mit itemgetter() Sortierung, aber wenn large mit itemgetter() Sortierung, kann ich nur sortieren Sie die Elemente in der Liste large, die [category x] und [[a,b,c], [a,b,c]] sind. Gibt es eine Möglichkeit, auf die niedrigste Elementebene für itemgetter zuzugreifen? oder eine andere Möglichkeit, diese Liste zu sortieren?

Danke.

+2

Schreiben Sie es zuerst als eine normale Schleife und dann sehen Sie, wie es einfacher oder effizienter. –

+0

geschachtelte Indexierung? 'groß [i] [j] [1]' – f5r5e5d

Antwort

2

Dies kann in einer Zeile erfolgen:

sorted_large = sorted(large, key=lambda item: item[1][0][1]) 

Die sorted eingebaute Funktion nimmt einen key Parameter:

key spezifiziert eine Funktion von einem Argument, das eine zu extrahieren verwendet wird Vergleichsschlüssel aus jedem Listenelement

Verwendung einer lambda Ausdruck kann der Sortierschlüssel extrahiert werden.

+0

Das war perfekt, ich habe viele Dinge ähnlich versucht, aber nicht die richtige Syntax .. Danke! – Rene

Verwandte Themen