问题描述
你想创建一个字典,并且在迭代或序列化这个字典时能够控制元素的顺序。
解决方案
这里介绍一种新的容器:collections
模块中的OrderedDict
类。它的用法如下:
from collections import OrderedDict
d = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3
讨论
有序词典就像常规词典一样,但有一些与排序操作相关的额外功能。由于内置的 dict
类获得了记住插入顺序的能力(在 Python 3.7 中保证了这种新行为),它们变得不那么重要了。
OrderedDict
内部维护着一个根据键插入顺序排序的双向列表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键进行重复赋值不会改变键的顺序。也正因如此,一个OrderedDict
的大小时普通字典的两倍,所以如果需要构建一个需要大量OrderedDict
实例的数据结构时,要权衡其带来的好处是否大过内存的额外消耗。
关于OrderedDict
更详细的介绍和用法,参见官方文档。