OrderedDict deviendra-t-il redondant dans Python 3.7?

90

Depuis le journal des modifications de Python 3.7 :

la nature de préservation de l'ordre d'insertion des objets dict a été déclarée comme faisant partie officielle de la spécification du langage Python.

Cela signifierait-il que OrderedDictcela deviendrait superflu? La seule utilité à laquelle je pense sera de maintenir la compatibilité ascendante avec les anciennes versions de Python qui ne préservent pas l'ordre d'insertion pour les dictionnaires normaux.

James Hiew
la source

Réponses:

132

Non, il ne deviendra pas redondant dans Python 3.7 car ce OrderedDictn'est pas seulement un dictqui conserve l'ordre d'insertion, il offre également une méthode dépendante de l'ordre OrderedDict.move_to_end()et prend en charge l' reversed()itération *.

De plus, les comparaisons d'égalité avec OrderedDictsont sensibles à l'ordre et ce n'est toujours pas le cas dicten Python 3.7, par exemple:

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

Deux questions pertinentes ici et ici .

* La prise en charge de l' reversed()itération de Python standard dictest ajoutée pour Python 3.8, voir issue33462

Chris_Rands
la source
Le point sur la sensibilité de l'ordre lors de la comparaison est très valable ici.
Tim Skov Jacobsen