Das Sortieren von Listen ist üblich, aber hier erfahren Sie, wie Sie Diktate in Listen und Instanzen in Listen sortieren. Alle Sorten sind in aufsteigender Reihenfolge. Verwenden Sie die eingebaute Funktion "sortiert" in sort.
Wenn Sie die Standardbibliotheksdatenklassen nicht verwenden, sollte dies wie 3.6 funktionieren
dict in list
Im Fall von dict in list muss das Schlüsselargument der sortierten Funktion angegeben werden. Sie können Lambda verwenden, wenn Sie den Schlüssel angeben, und Lambda x: x ['a'] als anonyme Funktion verwenden, aber laut dem Beamten scheint es schneller zu sein, den Item Getter des Standardbibliotheksoperators zu verwenden (ich habe ihn nicht überprüft, daher ist es nichts. Ich kann nicht sagen).
https://docs.python.org/ja/3/howto/sorting.html#operator-module-functions
Python bietet schnelle und benutzerfreundliche Accessor-Funktionen. Das Operatormodul verfügt über die Funktionen itemgetter (), attrgetter () und methodcaller ().
from operator import itemgetter
person_list = [{'name': 'a', 'age': 4}, {'name': 'b', 'age': 3}, {'name': 'c', 'age': 10}, {'name': 'd', 'age': 2}, {'name': 'e', 'age': 1}]
sorted(person_list, key=itemgetter('age'))
[{'name': 'e', 'age': 1},
{'name': 'd', 'age': 2},
{'name': 'b', 'age': 3},
{'name': 'a', 'age': 4},
{'name': 'c', 'age': 10}]
instance in list
Geben Sie wie bei dict in list die Parameter an, die Sie im Schlüsselargument der sortierten Funktion sortieren möchten. Verwenden Sie beispielsweise attr letter.
Sobald Sie ein Diktat in einer Liste mit Quellen erstellt und dann eine Instanz mit einer Liste (map (...)) erstellt haben, gibt es keine tiefe Bedeutung mehr. Ich wollte es nur einfacher machen, indem ich die person_list umleitete, die im Diktat in der Liste verwendet wurde.
from dataclasses import dataclass
from operator import attrgetter
@dataclass
class Person:
name: str
age: int
sources = [{'name': 'a', 'age': 4}, {'name': 'b', 'age': 3}, {'name': 'c', 'age': 10}, {'name': 'd', 'age': 2}, {'name': 'e', 'age': 1}]
person_list = list(map(lambda x: Person(**x), sources))
sorted(person_list, key=attrgetter('age'))
[Person(name='e', age=1),
Person(name='d', age=2),
Person(name='b', age=3),
Person(name='a', age=4),
Person(name='c', age=10)]
Wenn Sie in absteigender Reihenfolge sortieren möchten, setzen Sie das umgekehrte Argument der sortierten Funktion auf True.
Reference
Recommended Posts