Python 3.10发布了,还需要Ordered Dict吗?
全文2600字,阅读约需6分钟
早些时候,我们在讨论“列表是否可以替代元组”时,“稍微深入”的讨论过Python中列表和元组的区别(参见前文《从一个面试题说开去:有了列表为什么还要元组》)。
其实类似的情况还有很多,比如
-
dict
vsset
-
dict
vsOrderedDict
-
其他。。。。
这些数据结构在某些方面具有相似性,在使用时会引起的困惑,今天我们来聊聊 OrderedDict 和 dict,主要涉及几个方面:
- OrderedDict的用法和特点
- OrderedDict和dict的不同之处
- OrderedDict不可替代的应用场景
- Python核心开发对OrderedDict的看法
1. 关于OrderedDict
关于OrderedDict
我们可以用一句话来描述:它是一个有序的字典。
其实在2008年之前是没有OrderedDict的,于是很多开发者自行实现了有序字典,比如:
-
知名的Web框架Django创建了
SortedDict
-
pypi上有开发上传了
StableDict
,供他人使用
这从侧面说明了Python使用过程中,对”字典有序性“的需求。于是后来有了PEP372提案:由Python标准库提供统一的有序字典(OrderedDict),并于在python 2.7、3.1中发布于collections
模块中。
通常,collections
模块中存放了 ** “好用、但不那么常用” ** 的的容器型数据类型,比namedtuple
、defaultdict
等。可能有些人还不了解OrderedDict
,这里来简单介绍一下:
正如前面提到的,OrderedDict位于collections
模块中,使用前需要导入
from collections import OrderedDict
d = OrderedDict()
d["a"] = 1
d["c"] = 3
d["b"] = 2
print(d) # 打印OrderedDict
for _ in d: # 遍历OrderedDict
print(_)
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
a
c
b
从执行结果可以看出来,OrderedDict中的数据是稳定有序,数据的排序取决于**“数据加入OrderedDict的顺序”**。
此外,OrderedDict也可接受多个键值对进行创建,以下几个例子的执行结果相同:
d = OrderedDict([("a", 1), ("b", 2)]) # 例子1
d = OrderedDict({
"a": 1, "b&