Sind Wörterbücher in Python 3.6+ bestellt?


Answers

Im Folgenden wird die ursprüngliche erste Frage beantwortet:

Soll ich in Python 3.6 dict oder OrderedDict ?

Ich denke, dass dieser Satz aus der Dokumentation tatsächlich genug ist, um Ihre Frage zu beantworten

Der auftragserhaltende Aspekt dieser neuen Implementierung wird als Implementierungsdetail betrachtet und sollte nicht verlässlich sein

dict ist nicht explizit als geordnete Sammlung gedacht. Wenn Sie also konsistent bleiben und sich nicht auf einen Nebeneffekt der neuen Implementierung verlassen möchten, sollten Sie bei OrderedDict .

Machen Sie Ihren Code zukunftssicher :)

Darüber gibt es eine Debatte.

EDIT: Python 3.7 wird dies als Feature see

Question

Wörterbücher sind in Python 3.6 (zumindest unter der CPython-Implementierung) angeordnet, anders als in früheren Inkarnationen. Dies scheint eine wesentliche Änderung zu sein, aber es ist nur ein kurzer Abschnitt in der documentation . Es wird eher als CPython-Implementierungsdetail als als Sprachfeature beschrieben, bedeutet aber auch, dass dies in Zukunft Standard werden kann.

Wie funktioniert die neue Wörterbuchimplementierung besser als die ältere, während die Reihenfolge der Elemente erhalten bleibt?

Hier ist der Text aus der Dokumentation:

dict() jetzt eine "kompakte" Darstellung, die von PyPy entwickelt wurde . Die Speicherbelegung des neuen dict () ist im Vergleich zu Python 3.5 um 20% bis 25% kleiner. PEP 468 (Beibehalten der Reihenfolge von ** kwargs in einer Funktion) wird dadurch implementiert. Der auftragserhaltende Aspekt dieser neuen Implementierung wird als Implementierungsdetail betrachtet und sollte nicht verlässlich sein (dies kann sich in der Zukunft ändern, aber es ist wünschenswert, diese neue dict-Implementierung in der Sprache für einige Versionen zu haben, bevor die Sprachspezifikation geändert wird Ordnungskonservierende Semantik für alle aktuellen und zukünftigen Python-Implementierungen vorschreiben, was auch die Rückwärtskompatibilität mit älteren Versionen der Sprache, in denen die zufällige Iterationsreihenfolge noch immer gültig ist (zB Python 3.5), erhält. (Beitrag von INADA Naoki in Heft 27350. Idee ursprünglich von Raymond Hettinger vorgeschlagen .)

Update Dezember 2017: dict 's Beibehaltung der Reihenfolge ist für Python 3.7 guaranteed






Related