O OrderedDict se tornará redundante no Python 3.7?

92

No changelog do Python 3.7 :

a natureza de preservação da ordem de inserção de objetos dict foi declarada como uma parte oficial das especificações da linguagem Python.

Isso significa que OrderedDictse tornará redundante? O único uso que posso pensar é manter a compatibilidade com versões anteriores do Python, que não preservam a ordem de inserção para dicionários normais.

James Hiew
fonte

Respostas:

137

Não, ele não se tornará redundante no Python 3.7 porque OrderedDictnão é apenas um dictque retém a ordem de inserção, mas também oferece um método dependente do pedido OrderedDict.move_to_end(), e oferece suporte à reversed()iteração *.

Além disso, as comparações de igualdade com OrderedDictsão sensíveis à ordem e esse ainda não é o caso dictno Python 3.7, por exemplo:

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

Duas questões relevantes aqui e aqui .

* Suporte para reversed()iteração de Python regular dictfoi adicionado para Python 3.8, consulte o problema 33462

Chris_Rands
fonte
1
O ponto sobre a sensibilidade do pedido ao comparar é muito válido aqui.
Tim Skov Jacobsen