Python實用技法第6篇:讓字典保持有序

Mark發表於2019-02-16

上一篇文章:Python實用技法第5篇:一鍵多值字典
下一篇文章:Python實用技法第7篇:字典上對資料執行計算:求最小值、最大值、排序

1、需求?

我們想建立一個字典,同時當對字典做迭代或序列化操作時,也能控制其中元素的順序。

2、解決方案?

要控制字典中元素的順序,可以使用collections模組中的OrderedDict類。當對字典做迭代時,它會嚴格按照元素初始新增的順序進行。

from collections import OrderedDict

d=OrderedDict()
d[`a`]=1
d[`b`]=2
d[`c`]=3
d[`d`]=4

#根據插入刪除輸出
for key in d:
    print(key,d[key])

結果:

a 1
b 2
c 3
d 4

當想構建一個對映結構以便稍後對其做序列化或編碼成另一種格式時,OrderedDict就顯得特別有用。例如:如果想在進行JSON編碼時精確控制各欄位的順序,那麼只要首先在OrderedDict中構建資料就可以了:

from collections import OrderedDict
import json

d=OrderedDict()
d[`a`]=1
d[`b`]=2
d[`c`]=3
d[`d`]=4

j=json.dumps(d)
print(j)

結果:

{"a": 1, "b": 2, "c": 3, "d": 4}

OrderedDict內部維護了一個雙向連結串列,它會根據元素加入的順序來排列鍵的位置。第一個新加入的元素被放置在連結串列的末尾,接下來對已存在的鍵做重新賦值,不會改變鍵的位置。

請注意:OrderedDict的大小是普通字典的2倍。這是由於它額外建立的連結串列所致。因此,如果打算構建一個涉及大量OrderedDict例項的資料結構(例如從CSV檔案中讀取100 000行行內容到OrderedDict列表中),那麼需要認證對應用做需求分析,從而判斷使用OrderedDict所帶來的好處是否能超越因額外的記憶體開銷所帶來的缺點。

上一篇文章:Python實用技法第5篇:一鍵多值字典
下一篇文章:Python實用技法第7篇:字典上對資料執行計算:求最小值、最大值、排序

相關文章