python dict 排序原理_第一章Python数据结构和算法(字典排序)
字典排序
問題
你想創(chuàng)建一個字典,并且在迭代或序列化這個字典的時候能夠控制元素的順序。
解決方案
為了能控制一個字典中元素的順序,你可以使用 collections 模塊中的OrderedDict 類。在迭代操作的時候它會保持元素被插入時的順序,示例如下:
from collections import OrderedDict
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
print(d)
# OrderedDict([('foo', 1), ('bar', 2), ('spam', 3), ('grok', 4)])
for key, value in d.items():
print(key, value)
# foo 1
# bar 2
# spam 3
# grok 4
import json
d1 = json.dumps(d)
print(d1, type(d1))
# {"foo": 1, "bar": 2, "spam": 3, "grok": 4}
當(dāng)你想要構(gòu)建一個將來需要序列化或編碼成其他格式的映射的時候,OrderedDict是非常有用的。比如,你想精確控制以 JSON 編碼后字段的順序,你可以先使用OrderedDict 來構(gòu)建這樣的數(shù)據(jù)。
討論
OrderedDict 內(nèi)部維護(hù)著一個根據(jù)鍵插入順序排序的雙向鏈表。每次當(dāng)一個新的元素插入進(jìn)來的時候,它會被放到鏈表的尾部。對于一個已經(jīng)存在的鍵的重復(fù)賦值不會改變鍵的順序。
需要注意的是,一個 OrderedDict 的大小是一個普通字典的兩倍,因為它內(nèi)部維護(hù)著另外一個鏈表。所以如果你要構(gòu)建一個需要大量 OrderedDict 實例的數(shù)據(jù)結(jié)構(gòu)的時候(比如讀取 100,000 行 CSV 數(shù)據(jù)到一個 OrderedDict 列表中去),那么你就得仔細(xì)權(quán)衡一下是否使用 OrderedDict 帶來的好處要大過額外內(nèi)存消耗的影響。
總結(jié)
以上是生活随笔為你收集整理的python dict 排序原理_第一章Python数据结构和算法(字典排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 冻糯米玉米批发在哪里进货?
- 下一篇: 关于点名的简单python编程_如何用p