W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你想創(chuàng)建一個(gè)字典,并且在迭代或序列化這個(gè)字典的時(shí)候能夠控制元素的順序。
為了能控制一個(gè)字典中元素的順序,你可以使用collections模塊中的OrderedDict類。在迭代操作的時(shí)候它會(huì)保持元素被插入時(shí)的順序,示例如下:
from collections import OrderedDict
def ordered_dict():
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])
當(dāng)你想要構(gòu)建一個(gè)將來需要序列化或編碼成其他格式的映射的時(shí)候,OrderedDict是非常有用的。比如,你想精確控制以JSON編碼后字段的順序,你可以先使用OrderedDict來構(gòu)建這樣的數(shù)據(jù):
>>> import json
>>> json.dumps(d)
'{"foo": 1, "bar": 2, "spam": 3, "grok": 4}'
>>>
OrderedDict內(nèi)部維護(hù)著一個(gè)根據(jù)鍵插入順序排序的雙向鏈表。每次當(dāng)一個(gè)新的元素插入進(jìn)來的時(shí)候,它會(huì)被放到鏈表的尾部。對(duì)于一個(gè)已經(jīng)存在的鍵的重復(fù)賦值不會(huì)改變鍵的順序。
需要注意的是,一個(gè)OrderedDict的大小是一個(gè)普通字典的兩倍,因?yàn)樗鼉?nèi)部維護(hù)著另外一個(gè)鏈表。所以如果你要構(gòu)建一個(gè)需要大量OrderedDict實(shí)例的數(shù)據(jù)結(jié)構(gòu)的時(shí)候(比如讀取100,000行CSV數(shù)據(jù)到一個(gè)OrderedDict列表中去),那么你就得仔細(xì)權(quán)衡一下是否使用OrderedDict帶來的好處要大過額外內(nèi)存消耗的影響。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: