書名: Python進階編程:編寫更高效、優雅的Python代碼作者名: 劉宇宙 謝東 劉艷本章字數: 398字更新時間: 2021-04-30 12:39:44
3.2.3 字典排序
字典默認是無序的,但有時需要字典中元素保持原來的順序。為了便于使用者控制字典中元素的順序,collections模塊提供了一個OrderedDict類。在迭代操作的時候,OrderedDict類會使元素保持被插入時的順序,示例如下:
from collections import OrderedDict ordered_dict = OrderedDict() ordered_dict['a'] = 1 ordered_dict['b'] = 'abc' ordered_dict['c'] = 'hello world' ordered_dict['d'] = -5 for key in ordered_dict: print(f'get key is:{key}, value is:{ordered_dict[key]}')
當想要構建一個將來需要序列化或編碼成其他格式的映射文件的時候,OrderedDict類是非常有用的。
如果想精確控制以JSON編碼后的字段的順序,可以先使用OrderedDict來構建字典數據,再進行JSON編碼,在ordered_dict_exp.py文件中添加如下代碼:
import json print(json.dumps(ordered_dict))
OrderedDict類內部維護著一個根據鍵插入順序排序的雙向鏈表。當一個新的元素插入進來的時候,該元素會被放到鏈表的尾部,對已經存在的鍵的重復賦值不會改變鍵的順序。
注意 OrderedDict類的大小是一個普通字典的2倍,因為它內部維護著另外一個鏈表。所以,在構建一個需要大量OrderedDict實例的數據結構的時候(比如讀取1 000 000行CSV數據到一個OrderedDict類列表中去),我們就得慎重權衡使用OrderedDict類帶來的好處是否大于額外內存消耗的影響。