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

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

一、需求🙀

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

二、解決方案😸

要控制字典中元素的順序,能夠使用collections模塊中的OrderedDict類。當對字典作迭代時,它會嚴格按照元素初始添加的順序進行。json

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])

結果:segmentfault

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所帶來的好處是否能超越因額外的內存開銷所帶來的缺點。code

上一篇文章: Python實用技法第5篇:一鍵多值字典
下一篇文章: Python實用技法第7篇:字典上對數據執行計算:求最小值、最大值、排序
相關文章
相關標籤/搜索