官术网_书友最值得收藏!

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類帶來的好處是否大于額外內存消耗的影響。

主站蜘蛛池模板: 绵竹市| 巫溪县| 黄梅县| 鹤岗市| 苍梧县| 格尔木市| 平遥县| 涡阳县| 常宁市| 项城市| 曲松县| 内黄县| 榕江县| 武功县| 运城市| 涿鹿县| 新和县| 宕昌县| 屏东县| 招远市| 文登市| 桑植县| 三河市| 洪江市| 宿迁市| 永和县| 乌拉特后旗| 射阳县| 布拖县| 建阳市| 资中县| 洮南市| 秦安县| 庆安县| 县级市| 凤城市| 开江县| 鲜城| 海盐县| 堆龙德庆县| 漠河县|