溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python的setdefault與defaultdict函數(shù)怎么用

發(fā)布時(shí)間:2022-01-17 15:21:43 來源:億速云 閱讀:182 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“python的setdefault與defaultdict函數(shù)怎么用”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“python的setdefault與defaultdict函數(shù)怎么用”文章能幫助大家解決問題。

有這樣的需求,一個(gè)列表,里面是(key, value) 這樣的鍵值對元組,要將它轉(zhuǎn)換成一個(gè)字典對象,并將key相同的value作為一組??创a:

data = [("p", 1), ("p", 2), ("p", 3),
       ("h", 1), ("h", 2), ("h", 3)]

要轉(zhuǎn)換成

result = {'p': [1, 2, 3], 'h': [1, 2, 3]}

python的setdefault與defaultdict函數(shù)怎么用

下面這個(gè)方法是大家都能想到的,先判斷result中有沒有key,沒有則為其初始化一個(gè)列表,有則直接將value值append到列表中。但這段代碼在Python中不怎么優(yōu)雅

result = {}
for (key, value) in data:
   if key in result:
       result[key].append(value)
   else:
       result[key] = [value]

setdefault

更優(yōu)雅的方式就是使用setdefault方法,它是字典對象的一個(gè)實(shí)例方法,接收兩個(gè)參數(shù),用法和字典的get方法類似,但是比 get 更強(qiáng)大。 它可以為給字典的key設(shè)定一個(gè)默認(rèn)值(如果key不在字典中的時(shí)候)

定義

 def setdefault(self, k, d=None):
     """ D.setdefault(k[,d]) -> D.get(k,d),
         also set D[k]=d if k not in D
     """
   value = D.get(k,d)
   if k not in D:
       D[k]=d
   return value

當(dāng)然,內(nèi)部具體實(shí)現(xiàn)肯定比上面的代碼要高效。二者的區(qū)別是:L get 方法設(shè)置的默認(rèn)值不會(huì)改變原字典, 而setdefault設(shè)置的默認(rèn)值會(huì)改變原字典的值。

>>> d = {"x":3}
>>> y = d.get("y", 4)
>>> y
4
>>> d
{'x': 3}

對比

>>> y = d.setdefault("y", 4)
>>> y
4
>>> d
{'y': 4, 'x': 3}

所以,前面的需求就有了這種更優(yōu)雅的寫法:

result = {}
data = [("p", 1), ("p", 2), ("p", 3),
       ("h", 1), ("h", 2), ("h", 3)]
for (key, value) in data:
   result.setdefault(key, []).append(value)

defaultdict

defaultdict是屬于collections 模塊下的一個(gè)工廠函數(shù),用于構(gòu)建字典對象,接收一個(gè)函數(shù)(可調(diào)用)對象為作為參數(shù)。參數(shù)返回的類型是什么,key對應(yīng)value就是什么類型。

>>> result = defaultdict(list)
>>> result
defaultdict(<type 'list'>, {})
>>> result['a']
[]

參數(shù)為 list,它就會(huì)構(gòu)建一個(gè)默認(rèn)value為list的字典,例如result[‘a(chǎn)’]的值默認(rèn)就是list對象。

因此,前面這段代碼可以改為:

from collections import defaultdict
result = defaultdict(list)
data = [("p", 1), ("p", 2), ("p", 3),
       ("h", 1), ("h", 2), ("h", 3)]

for (key, value) in data:
   result[key].append(value)

關(guān)于“python的setdefault與defaultdict函數(shù)怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI