OrderedDict vs defaultdict vs dict
In python-Bibliothek, jetzt haben wir zwei Python-Implementierung von Wörterbüchern, die Unterklassen dict
über die native dict
geben.
Python-Befürworter haben es immer vorgezogen defaultdict
über die Verwendung dict.setdefault
wo es möglich ist. Auch die doc Zitate, die This technique is simpler and faster than an equivalent technique using dict.setdefault():
In ähnlicher Weise, wie die Wörterbücher nicht die Aufrechterhaltung der Ordnung, mit OrderedDict
über die Verwendung dict
gefolgt vom Sortieren der Elemente ist bevorzugt, wenn immer möglich, für die alternative Nutzung.
In der obige Fall, der code ist definitiv sauberer, aber auf Kosten von Einbußen bei der Leistung.
Während der Beantwortung und Kommentierung auf eine Frage python eindeutige Liste basiert auf Elementich stolperte über die performance-Einbußen über die native dict
bei der Verwendung defaultdict
und OrderedDict
. Es scheint auch die Größe der Daten ist auch nicht unerheblich für die performance-Vorteil dict
Lösung hat gegenüber anderen.
Ich glaube There should be one-- and preferably only one --obvious way to do it.
so was ist der bevorzugte Weg?
InformationsquelleAutor der Frage Abhijit | 2013-10-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt nicht eine einzige Antwort und nicht eine, wahre und einzige dict. Zu viele Variablen, es hängt davon ab:
Ich bin verabscheuen zu verallgemeinern, aber hier sind einige Allgemeine Hinweise:
This technique is simpler and faster than an equivalent technique using dict.setdefault()
ist nur flach falsch. Es kommt auf die Daten;setdefault
ist schneller und einfacher mit kleinen Datensätzen;defaultdict
ist schneller für größere Datenmengen mit homogener key-sets;setdefault
einen Vorteil mit mehr heterogenen-key-sets;OrderedDict
ist langsamer in allen anderen Fällen als ein Algorithmus, der hängt auf Bestellung und ist nicht leicht zu rekonstruieren oder zu Sortieren;dict
Operationen;Die einzige Wahrheit: Es Hängt! Alle drei Verfahren sind nützlich.
Hier ist etwas timing-code zu zeigen:
Python 2.7 Ergebnis:
Python 3.3 Ergebnis:
InformationsquelleAutor der Antwort dawg
Ich das Gefühl, dass Ihre Annahme - nur eine bevorzugte Art und Weise - nicht halten. Ich sehe mindestens zwei Fällen mit unterschiedlichen Anforderungen:
während in
InformationsquelleAutor der Antwort ojdo