Python: Wie Benutzerdefiniert, um eine Liste?
Obs: ich kenne die Listen in python sind von der Reihenfolge fest, aber denke das wird werden.
Und ich bin mit Python 2.4
Habe ich eine Liste, die wie (zum Beispiel) diesen:
mylist = [ ( u'Article', {"...some_data..."} ) ,
( u'Report' , {"...some_data..."} ) ,
( u'Book' , {"...another_data..."} ) ,
...#continue
]
Diese variable mylist ist, erhalten aus einer Funktion und den 'Auftrag' von der Liste zurückgegeben wird, variieren. Also, manchmal wird es wie auf dem Beispiel. Manchmal, den 'Bericht' kommen vor 'Artikel', etc.
Habe ich eine Feste Reihenfolge, die ich möchte, auf dieser Liste (und nicht alphabetisch).
Lassen Sie uns sagen, dass meine Feste Reihenfolge ist: 'Report', 'Artikel', 'Buch', ...
So, was ich will, ist: was um 'mylist' instanziiert wird, möchte ich es neu anordnen macht 'Bericht' Aufenthalt auf der front, 'Artikel' auf den zweiten, etc...
Was ist der beste Ansatz zum Sortieren meiner Liste (wobei das erste element des Tupels der einzelnen Artikel auf der Liste) mit meinem "custom" bestellen?
Antwort:
Landete ich mit diesem:
mylist wurde eine Liste von dicts, wie diese:
mylist = [{'id':'Article', "...some_data..."} ,
...etc
]
jeder dict-mit einer 'id', die mussten sortiert werden.
Speichern der richtigen Reihenfolge auf ein listAssigning die correct_order auf eine Liste:
correct_order = ['Report', 'Article', 'Book', ...]
haben und tun:
results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man ein Wörterbuch benutzt, das würde die Karte jedem ersten element mit seinem "Gewicht" und dann das Kontrollkästchen dieses Wörterbuch innerhalb einer Sortier-Funktion.
Etwas wie:
sorted(mylist, key=lambda x: d[x[0]])
d = ["Report", "Article", "Book"]
und dannresult = sorted(mylist, key=lambda x : d.index(x[0])
Könnten Sie ein Wörterbuch, das Ihnen erlauben würde, den Zugang zum "Buch", "Artikel", usw. ohne Sorge über die Reihenfolge. Ich würde die Daten aus dieser Liste in ein dict, die wie folgt Aussehen:
Wenn Sie wirklich wollen, Sortieren Sie Ihre Liste in der Weise, die Sie beschrieben, können Sie die
list.sort
mit einer key-Funktion, repräsentiert Ihre Besondere Art, um (Dokumentation). Sie müssen die Taste Funktion, wie Sie brauchen nur den Zugriff auf das erste element und Ihre Sortierung ist auch nicht alphabetisch.Diese Weise entsteht ein dict und zieht die Elemente, um Sie
Diese Weise verwendet Sortieren mit O(1) - lookups für die Bestellung
Mehr allgemein, es könnten Elemente des mylist sind nicht in den angegebenen festen Reihenfolge. Diese wird, um nach der Regel, aber in Ruhe lassen, die die relative Reihenfolge der alles, was außerhalb der Regel: