129

From the Python 3.7 changelog:

the insertion-order preservation nature of dict objects has been declared to be an official part of the Python language spec.

Would this mean that OrderedDict will become redundant? The only use I can think of it will be to maintain backwards compatibility with older versions of Python which don't preserve insertion-order for normal dictionaries.

Chris_Rands
  • 38,994
  • 14
  • 83
  • 119
James Hiew
  • 6,040
  • 5
  • 27
  • 41

1 Answers1

197

No it won't become redundant in Python 3.7 because OrderedDict is not just a dict that retains insertion order, it also offers an order dependent method, OrderedDict.move_to_end(), and supports reversed() iteration*.

Moreover, equality comparisons with OrderedDict are order sensitive and this is still not the case for dict in Python 3.7, for example:

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

Two relevant questions here and here.

* Support for reversed() iteration of regular Python dict is added for Python 3.8, see issue33462

wjandrea
  • 28,235
  • 9
  • 60
  • 81
Chris_Rands
  • 38,994
  • 14
  • 83
  • 119
  • 9
    The point about order sensitivity when comparing is very valid here. – Tim Skov Jacobsen Nov 02 '20 at 21:12
  • Thank you very much for the explanation. I believe that with 3.8, there is no such difference anymore. – leggewie Jul 24 '21 at 17:31
  • 5
    @leggewie In Python 3.8 (and in 3.9), the point about equality comparisons is still different between `OrderedDict` and regular `dict`- I do not expect this to change anytime soon – Chris_Rands Aug 07 '21 at 18:34