字典排序
問題
創(chuàng)建字典求妹,并在迭代或序列化字典的時候控制元素的順序旬盯。
解決方法
Python 提供的 collections
模塊中 OrderedDict
分瘦,就能夠控制字典中元素的順序。在執(zhí)行迭代操作的時候贾陷,元素會保持插入時的順序棋凳,示例代碼如下:
from collections import OrderedDict
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
for key in d:
print(key, d[key])
# 輸出結(jié)果
# foo 1
# bar 2
# spam 3
# grok 4
OrderedDict
在構(gòu)建需要序列化或者編碼成其他格式的映射同樣適用。比如,控制以 JSON 編碼后字段的順序:
>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'
>>>
小結(jié)
其實(shí) OrderedDict
內(nèi)部維護(hù)一個根據(jù)鍵插入順序排序的雙向鏈表抒寂。當(dāng)新的元素插入進(jìn)來的時候,會被放到鏈表的尾部掠剑。而且已經(jīng)存在的鍵重復(fù)賦值并不會改變鍵的順序屈芜。
注意: 因?yàn)椋?code>OrderedDict 內(nèi)部維護(hù)另外一個鏈表,它的大小是普通字典的兩倍澡腾。所以使用的同時沸伏,需要權(quán)衡使用 OrderedDict
的好處是否要大于額外內(nèi)存的消耗等影響。