Ab Python 3.6 ist der Standard dict
Typ behält standardmäßig die Einfügereihenfolge bei.
Definition von
d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}
ergibt ein Wörterbuch mit den Schlüsseln in der im Quellcode aufgeführten Reihenfolge.
Dies wurde durch die Verwendung eines einfachen Arrays mit ganzen Zahlen für die spärliche Hash-Tabelle erreicht, wobei diese ganzen Zahlen in ein anderes Array indizieren, das die Schlüssel-Wert-Paare (plus den berechneten Hash) speichert. Das letztgenannte Array speichert die Elemente zufällig in Einfügereihenfolge, und die gesamte Kombination benötigt tatsächlich weniger Speicher als die in Python 3.5 und früher verwendete Implementierung. Siehe die ursprüngliche Idee von Raymond Hettinger für Einzelheiten.
In 3.6 wurde dies noch als ein Implementierungsdetail betrachtet; siehe die Was ist neu in Python 3.6 Dokumentation :
Der ordnungserhaltende Aspekt dieser neuen Implementierung wird als Implementierungsdetail betrachtet und sollte nicht als verlässlich angesehen werden (dies kann sich in der Zukunft ändern, aber es ist erwünscht, diese neue dict-Implementierung für einige Versionen in der Sprache zu haben, bevor die Sprachspezifikation geändert wird, um die ordnungserhaltende Semantik für alle aktuellen und zukünftigen Python-Implementierungen vorzuschreiben; dies hilft auch, die Rückwärtskompatibilität mit älteren Versionen der Sprache zu bewahren, in denen die zufällige Iterationsreihenfolge noch in Kraft ist, z.B. Python 3.5).
Python 3.7 erhebt dieses Implementierungsdetail zu einer Sprachspezifikation Daher ist es nun zwingend erforderlich, dass dict
behält die Reihenfolge in allen Python-Implementierungen bei, die mit dieser oder einer neueren Version kompatibel sind. Siehe die Verlautbarung des BDFL . Ab Python 3.8 unterstützen Dictionaries auch Iteration in umgekehrter Reihenfolge .
Möglicherweise möchten Sie trotzdem die collections.OrderedDict()
Klasse in bestimmten Fällen, da es über die Standardfunktionalität hinaus einige zusätzliche Funktionen bietet dict
Art. Wie zum Beispiel wendbar (dies gilt auch für die Objekte anzeigen ), und die Unterstützung der Neuordnung (über die move_to_end()
Methode ).