Wird OrderedDict in Python 3.7 überflüssig?

90

Aus dem Python 3.7-Änderungsprotokoll :

Die Beibehaltung der Einfügungsreihenfolge von diktierten Objekten wurde als offizieller Bestandteil der Python-Sprachspezifikation deklariert .

Würde dies bedeuten, dass OrderedDictdas überflüssig wird? Die einzige Verwendung, die ich mir vorstellen kann, besteht darin, die Abwärtskompatibilität mit älteren Python-Versionen aufrechtzuerhalten, bei denen die Einfügereihenfolge für normale Wörterbücher nicht beibehalten wird.

James Hiew
quelle

Antworten:

132

Nein, es wird in Python 3.7 nicht redundant, da OrderedDictes nicht nur dictdie Einfügereihenfolge beibehält, sondern auch eine auftragsabhängige Methode OrderedDict.move_to_end()bietet und die reversed()Iteration * unterstützt .

Darüber hinaus sind Gleichheitsvergleiche mit OrderedDictauftragsabhängig, und dies ist dictin Python 3.7 immer noch nicht der Fall , zum Beispiel:

>>> OrderedDict([(1,1), (2,2)]) == OrderedDict([(2,2), (1,1)]) 
False
>>> dict([(1,1), (2,2)]) == dict([(2,2), (1,1)]) 
True

Zwei relevante Fragen hier und hier .

* Unterstützung für die reversed()Iteration von regulärem Python wurde dictfür Python 3.8 hinzugefügt, siehe Ausgabe 33462

Chris_Rands
quelle
Der Punkt über die Bestellempfindlichkeit beim Vergleich ist hier sehr gültig.
Tim Skov Jacobsen