I was playing around with the OrderedDict
type in Python 3.6 and was surprised by its behaviour. When I create a simple dict
like this in IPython:
d = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
I get:
{'guido': 4127, 'jack': 4098, 'sape': 4139}
as an output, which doesn't preserve the order of elements at instantiation for some reason. Now, when I create an OrderedDict
from d
like this:
od = OrderedDict(d)
the output is:
OrderedDict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
Now I ask myself, how can the OrderedDict
-constructor know about the order of elements at instantiation of d
? And does it always behave the same, such that I can rely on the order of elements in the OrderedDict
?
I was already reading the Python docs about dictionaries and OrderedDict
s but I didn't find an answer to my question.
The output from (sys.version
):
In[22]: sys.version
Out[22]: '3.6.1 (default, Apr 4 2017, 09:40:21) \n[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)]'