這篇文章主要介紹“python的setdefault與defaultdict函數(shù)怎么用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python的setdefault與defaultdict函數(shù)怎么用”文章能幫助大家解決問題。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍安免費建站歡迎大家使用!
有這樣的需求,一個列表,里面是(key, value) 這樣的鍵值對元組,要將它轉(zhuǎn)換成一個字典對象,并將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]}
下面這個方法是大家都能想到的,先判斷result中有沒有key,沒有則為其初始化一個列表,有則直接將value值append到列表中。但這段代碼在Python中不怎么優(yōu)雅
result = {}
for (key, value) in data:
if key in result:
result[key].append(value)
else:
result[key] = [value]
更優(yōu)雅的方式就是使用setdefault方法,它是字典對象的一個實例方法,接收兩個參數(shù),用法和字典的get
方法類似,但是比 get 更強大。 它可以為給字典的key設(shè)定一個默認值(如果key不在字典中的時候)
定義
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
當然,內(nèi)部具體實現(xiàn)肯定比上面的代碼要高效。二者的區(qū)別是:L get 方法設(shè)置的默認值不會改變原字典, 而setdefault設(shè)置的默認值會改變原字典的值。
>>> 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是屬于collections 模塊下的一個工廠函數(shù),用于構(gòu)建字典對象,接收一個函數(shù)(可調(diào)用)對象為作為參數(shù)。參數(shù)返回的類型是什么,key對應(yīng)value就是什么類型。
>>> result = defaultdict(list)
>>> result
defaultdict(, {})
>>> result['a']
[]
參數(shù)為 list,它就會構(gòu)建一個默認value為list的字典,例如result[‘a(chǎ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)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。