1.7 字典排序

1.7 字典排序

问题描述

你想创建一个字典,并且在迭代或序列化这个字典时能够控制元素的顺序。

解决方案

这里介绍一种新的容器: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更详细的介绍和用法,参见官方文档。