1.7 字典排�¶

问题¶

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

解决方案¶

为了能控制一个字典中元素的顺�,你�以使用 collections 模�中的 OrderedDict 类。 在迭代�作的时候它会��元素被�入时的顺�,示例如下:

from collections import OrderedDict

d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# Outputs "foo 1", "bar 2", "spam 3", "grok 4"
for key in d:
    print(key, d[key])

当你想�构建一个将�需��列化或编��其他格�的映射的时候, OrderedDict 是�常有用的。 比如,你想精确控制以 JSON 编��字段的顺�,你�以先使用 OrderedDict �构建这样的数�:

>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'
>>>

讨论¶

OrderedDict 内部维护�一个根�键�入顺�排�的��链表。�次当一个新的元素�入进�的时候, 它会被放到链表的尾部。对于一个已�存在的键的��赋值�会改�键的顺�。

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