Contents

20.1.7. 有序字典

#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/7/28 19:15
# filename: 07.字典的排序.py
from collections import OrderedDict

d = OrderedDict()

d["hujianli1"] = 1
d["hujianli2"] = 2
d["hujianli3"] = 3
d["hujianli4"] = 4

print(d)
for key in d:
    print(key, d[key])


# 控制json编码后的字段的顺序。
import json
print(json.dumps(d))
print(type(json.dumps(d)))

输出信息

OrderedDict([('hujianli1', 1), ('hujianli2', 2), ('hujianli3', 3), ('hujianli4', 4)])
hujianli1 1
hujianli2 2
hujianli3 3
hujianli4 4
{"hujianli1": 1, "hujianli2": 2, "hujianli3": 3, "hujianli4": 4}
<class 'str'>

注意:

OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。
每次当一个新的元素插入进来的时候, 它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会改变键的顺序。

需要注意的是,一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。
所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候(比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),
那么你就得仔细权衡一下是否使用 OrderedDict 带来的好处要大过额外内存消耗的影响。