Pythonischer Weg, um die Liste der namedtuples nach Feldnamen zu sortieren
Möchte ich so Sortieren Sie eine Liste der benannten Tupel, ohne sich zu erinnern, den index des Feldnamens. Meine Lösung ziemlich umständlich und war in der Hoffnung jemand hätte eine elegantere Lösung.
from operator import itemgetter
from collections import namedtuple
Person = namedtuple('Person', 'name age score')
seq = [
Person(name='nick', age=23, score=100),
Person(name='bob', age=25, score=200),
]
# sort list by name
print(sorted(seq, key=itemgetter(Person._fields.index('name'))))
# sort list by age
print(sorted(seq, key=itemgetter(Person._fields.index('age'))))
Dank,
Nick
InformationsquelleAutor der Frage Nick | 2012-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Liste Sortieren nach name
Liste Sortieren nach Alter
InformationsquelleAutor der Antwort jamylak
InformationsquelleAutor der Antwort clyfish
Getestet habe ich die beiden alternativen, die hier gegeben werden für die Geschwindigkeit, da @zenpoy war über die Leistung besorgt.
Prüfung Skript:
Ergebnisse:
Verwendung von lambda-war in der Tat langsamer. Bis zu 10% langsamer.
BEARBEITEN:
Weitere Tests zeigt die Ergebnisse beim Sortieren mit mehreren Parametern. Hinzugefügt die folgenden zwei Testfälle mit dem gleichen setup:
Ergebnisse:
Lambda noch underperforms, aber weniger. Jetzt 5% langsamer.
Prüfung erfolgt auf Python-3.6.0.
InformationsquelleAutor der Antwort André Christoffer Andersen
da niemand erwähnte mit itemgetter(), hier, wie Sie mit itemgetter().
InformationsquelleAutor der Antwort sir.Suhrab