Czy OrderedDict stanie się zbędne w Pythonie 3.7?

90

Z dziennika zmian Pythona 3.7 :

natura zachowania kolejności wstawiania obiektów dict została zadeklarowana jako oficjalna część specyfikacji języka Python.

Czy to oznaczałoby, że OrderedDictstaną się zbędne? Jedynym zastosowaniem, o jakim myślę, będzie zachowanie wstecznej kompatybilności ze starszymi wersjami Pythona, które nie zachowują kolejności wstawiania dla normalnych słowników.

James Hiew
źródło

Odpowiedzi:

132

Nie, nie stanie się on zbędny w Pythonie 3.7, ponieważ OrderedDictnie tylko dictzachowuje kolejność wstawiania, ale także oferuje metodę zależną od zamówienia OrderedDict.move_to_end()i obsługuje reversed()iterację *.

Co więcej, porównania równości z OrderedDictsą wrażliwe na kolejność i nadal nie ma to miejsca dictw Pythonie 3.7, na przykład:

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

Dwa istotne pytania tutaj i tutaj .

* Obsługa reversed()iteracji zwykłego języka Python dictzostała dodana do języka Python 3.8, patrz problem33462

Chris_Rands
źródło
Kwestia wrażliwości na porządek przy porównywaniu jest tutaj bardzo ważna.
Tim Skov Jacobsen