collections.OrderedDict

Python 词典中键的顺序是任意的:它们不受添加它们的顺序的约束。

例如:

>>> d = {'foo': 5, 'bar': 6}
>>> print(d)
{'foo': 5, 'bar': 6}
>>> d['baz'] = 7
>>> print(a)
{'baz': 7, 'foo': 5, 'bar': 6}
>>> d['foobar'] = 8
>>> print(a)
{'baz': 7, 'foo': 5, 'bar': 6, 'foobar': 8}
```

(上面隐含的任意顺序意味着你可以使用上面的代码获得与此处所示相同的结果。)

键出现的顺序是它们将被迭代的顺序,例如使用 for 循环。

collections.OrderedDict 类提供保留键顺序的字典对象。OrderedDicts 可以创建如下所示,带有一系列有序项(这里是元组键值对的列表):

>>> from collections import OrderedDict
>>> d = OrderedDict([('foo', 5), ('bar', 6)])
>>> `print(d)`
OrderedDict([('foo', 5), ('bar', 6)])
>>> d['baz'] = 7
>>> `print(d)`
OrderedDict([('foo', 5), ('bar', 6), ('baz', 7)])
>>> d['foobar'] = 8
>>> `print(d)`
OrderedDict([('foo', 5), ('bar', 6), ('baz', 7), ('foobar', 8)])

或者我们可以创建一个空的 OrderedDict 然后添加项目:

>>> o = `OrderedDict()`
>>> o['key1'] = "value1"
>>> o['key2'] = "value2"
>>> `print(o)`
OrderedDict([('key1', 'value1'), ('key2', 'value2')])

通过 OrderedDict 迭代允许按照添加的顺序进行密钥访问。

如果我们为现有密钥分配新值会怎样?

>>> d['foo'] = 4
>>> `print(d)`
OrderedDict([('foo', 4), ('bar', 6), ('baz', 7), ('foobar', 8)])

键保留在 OrderedDict 的原始位置。