日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Python3中collections.OrderedDict介绍

發(fā)布時(shí)間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python3中collections.OrderedDict介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? Python3中的collections模塊實(shí)現(xiàn)了特定目標(biāo)的容器,以提供Python標(biāo)準(zhǔn)內(nèi)建容器dict、list、set和tuple的替代選擇,包括namedtuple、deque、ChainMap、Counter、OrderedDict、defaultdict、UserDict、UserList、UserString。這里介紹下OrderedDict,它繼承自dict,返回dict子類的實(shí)例,實(shí)現(xiàn)在 https://github.com/python/cpython/blob/3.10/Lib/collections/__init__.py。

? ? ? OrderedDict是dict子類,OrderedDict會(huì)記住item插入的順序。常規(guī)dict不跟蹤插入順序,迭代它會(huì)以任意順序給出值(Python 3.7之前的版本會(huì)這樣)。Python 3.7開始,dict的插入順序也得到保證

? ? ? 如果某個(gè)key的值發(fā)生變化,key在OrderedDict中的位置保持不變。

? ? ? 刪除和重新插入相同的key會(huì)將它push到后面作為OrderedDict,但是,保持插入的順序。

? ? ? OrderedDict比dict中多的函數(shù)為move_to_end。此函數(shù)將現(xiàn)有key移動(dòng)到OrderedDict的任一端。如果參數(shù)last為True(默認(rèn)值),則將item移至末尾;如果last為False,則移至開頭。如果key不存在,則觸發(fā)KeyError。

? ? ? OrderedDict與dict差異:

? ? ? (1).dict被設(shè)計(jì)為非常擅長映射操作(map operation),跟蹤插入順序是次要的。

? ? ? (2).OrderedDict旨在擅長重新排序操作(reorder operation),空間效率、迭代速度和更新操作的性能是次要的。

? ? ? (3).在算法上,OrderedDict可以比dict更好地處理頻繁的重新排序操作。

? ? ? (4).OrderedDict的popitem函數(shù)具有不同的簽名,它接受一個(gè)可選參數(shù)來指定pop的pair(key, value)是LIFO order(當(dāng)last為True時(shí))還是FIFO order。

? ? ? (5).OrderedDict的move_to_end函數(shù)可以有效地將item移動(dòng)到任一端。

? ? ? (6).OrderedDict對(duì)象與常規(guī)dict比較,對(duì)順序不敏感;但是OrderedDict對(duì)象之間的相等性判斷是順序敏感的。

? ? ?測(cè)試代碼如下:

from collections import OrderedDictvar = 2
if var == 1:# reference: https://www.geeksforgeeks.org/ordereddict-in-python/# 注:在Python 3.7.11中,多次執(zhí)行以下測(cè)試代碼,dict和OrderedDict的輸出結(jié)果始終相同# 從python 3.7開始,python dict的插入順序是有保證的print("This is a dict:")d = {}d["a"] = 1; d["b"] = 2; d["c"] = 3; d["d"] = 4for key, value in d.items():print(key, value, end=",")d["c"] = 5; print("")for key, value in d.items():print(key, value, end=",")d.pop("c"); print("")for key, value in d.items():print(key, value, end=",")d["c"] = 3; print("")for key, value in d.items():print(key, value, end=",")print("\nThis is an Ordered Dict:")od = OrderedDict()od["a"] = 1; od["b"] = 2; od["c"] = 3; od["d"] = 4for key, value in od.items():print(key, value, end=",")# 如果某個(gè)key的值發(fā)生變化,key在OrderedDict中的位置保持不變od["c"] = 5; print("")for key, value in od.items():print(key, value, end=",")# 刪除和重新插入相同的key會(huì)將它push到后面作為OrderedDcit,但是,保持插入的順序od.pop("c"); print("")for key, value in od.items():print(key, value, end=",")od["c"] = 3; print("")for key, value in od.items():print(key, value, end=",")print("")
elif var == 2:od = OrderedDict()print(isinstance(od, OrderedDict)) # Trueprint(isinstance(od, dict)) # Trueod["a"] = 1; od["b"] = 2; od["c"] = 3; od["d"] = 4# popitem: 返回一個(gè)(key, value)鍵值對(duì).如果last為True,則按LIFO后進(jìn)先出的順序返回鍵值對(duì),否則就按FIFO先進(jìn)先出的順序返回鍵值對(duì)print(od.popitem(last=True)) # ('d', 4)print(od.popitem(last=False)) # ('a', 1)od["e"] = 5; od["f"] = 6for key, value in od.items():print(key, value, end=",") # b 2,c 3,e 5,f 6,print("")# move_to_end: 將現(xiàn)有key移動(dòng)到OrderedDict的任一端.如果last為True(默認(rèn)值),則將item移至末尾;如果last為False,則移至開頭;如果key不存在,則觸發(fā)KeyErrorod.move_to_end("c", last=True)for key, value in od.items():print(key, value, end=",") # b 2,e 5,f 6,c 3,print("")od.move_to_end("c", last=False)for key, value in od.items():print(key, value, end=",") # c 3,b 2,e 5,f 6,print("")# OrderedDict對(duì)象與常規(guī)dict比較,對(duì)順序不敏感d1 = {"c":3, "b":2, "e":5, "f":6}; print(od == d1) # Trued2 = {"b":2, "e":5, "f":6, "c":3}; print(od == d2) # Trueprint(d1 == d2) # True# ?OrderedDict對(duì)象之間的相等性判斷是順序敏感的od2 = OrderedDict()od2["c"] = 3; od2["b"] = 2; od2["e"] = 5; od2["f"] = 6; print(od == od2) # Trueod3 = OrderedDict()od3["c"] = 3; od3["b"] = 2; od3["f"] = 6; od3["e"] = 5; print(od3 == od2) # Falseprint("test finish")

? ? ? GitHub:https://github.com/fengbingchun/Python_Test

總結(jié)

以上是生活随笔為你收集整理的Python3中collections.OrderedDict介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。