Die Antwort lesen und weiterschauen Operator.itemgetter. Kann ich im selben Prozess nach mehreren Werten sortieren (zum Beispiel haben wir [{'name':'Bart', 'age':10, 'note':3},{'name':'Homer','age':10,'note':2},{'name':'Vasile','age':20,'note':3}] Und zu verwenden: from operator import itemgetter newlist = sorted(old_list, key=itemgetter(-'note','name') EDIT: Getestet und es funktioniert, aber ich weiß nicht, wie ich DESC notiere und ASC benenne.
Die Verwendung von Schlüsseln ist nicht nur sauberer, sondern auch effizienter.
– jfs
16. September 2008 um 15:03
Der schnellste Weg wäre das Hinzufügen einer newlist.reverse()-Anweisung. Ansonsten können Sie einen Vergleich wie cmp=lambda x,y: – cmp(x) definieren[‘name’],y[‘name’]).
– Mario F
13. Okt. 2009 um 7:14
Wenn der Sortierwert eine Zahl ist, könnte man sagen: lambda k: (k[‘age’] * -1), um eine umgekehrte Sortierung zu erhalten
– Philluminati
20. November 2009 um 15:16 Uhr
Dies gilt auch für eine Liste von Tupeln, sofern Sie diese verwenden itemgetter(i) Wo i ist der Index des Tupelelements, nach dem sortiert werden soll.
– Radikand
11. Juli 2012 um 23:14
itemgetter akzeptiert mehr als ein Argument: itemgetter(1,2,3) ist eine Funktion, die ein Tupel zurückgibt obj[1], obj[2], obj[3]sodass Sie damit komplexe Sortierungen durchführen können.
– Bakuriu
7. September 2012 um 17:59
import operator
So sortieren Sie die Liste der Wörterbücher nach key=’name’:
…das Lambda ist meiner Meinung nach leichter zu verstehen als operator.itemgetteraber Ihr Kilometerstand kann variieren.
Was könnte getan werden, wenn der Schlüssel unbekannt ist und sich ständig ändert? Ich meine eine Liste von Diktaten mit nur einem Schlüssel und Wert, aber der Schlüssel und der Wert konnten nicht definiert werden, da sie sich ständig ändern.
– Sam
1. Dezember 2020 um 14:51 Uhr
Ich bräuchte mehr Beispiele zum Anschauen. Versuchen Sie, eine mögliche Lösung auf dem Codereview-Stackexchange einzureichen und zu fragen, ob es einen besseren Weg gibt.
– pjz
30. Dezember 2020 um 1:02
@Sam, wenn Sie nach dem Wert des einzelnen Schlüssels im Diktat sortieren möchten, auch wenn Sie den Schlüssel nicht kennen, können Sie dies tun key=lambda k: list(k.values())[0]
– pjz
10. März 2021 um 6:38
Wenn Sie die Liste nach mehreren Schlüsseln sortieren möchten, können Sie Folgendes tun:
Es ist ziemlich hackig, da es auf der Konvertierung der Werte in eine einzelne Zeichenfolgendarstellung zum Vergleich beruht, aber es funktioniert wie erwartet für Zahlen, einschließlich negativer Einsen (obwohl Sie Ihre Zeichenfolge entsprechend mit Nullauffüllungen formatieren müssen, wenn Sie Zahlen verwenden).
a = [{'name':'Homer', 'age':39}, ...]
# This changes the list a
a.sort(key=lambda k : k['name'])
# This returns a new list (a is not modified)
sorted(a, key=lambda k : k['name'])
Die Antwort lesen und weiterschauen Operator.itemgetter. Kann ich im selben Prozess nach mehreren Werten sortieren (zum Beispiel haben wir
[{'name':'Bart', 'age':10, 'note':3},{'name':'Homer','age':10,'note':2},{'name':'Vasile','age':20,'note':3}]
Und zu verwenden:from operator import itemgetter newlist = sorted(old_list, key=itemgetter(-'note','name')
EDIT: Getestet und es funktioniert, aber ich weiß nicht, wie ich DESC notiere und ASC benenne.– Claudiu
21. Mai 2020 um 7:13 Uhr