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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

构造函数= default;_Python Collections之defaultdict 和 default_factory关系

發(fā)布時間:2023/12/19 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 构造函数= default;_Python Collections之defaultdict 和 default_factory关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

容器(collections)是Python附帶一個模塊,它包含許多容器數(shù)據(jù)類型,今天先拿出defaultdict來說。

dict在python中是非常常見的一種數(shù)據(jù)類型。

colours = (('Yasoob', 'Yellow'),('Ali', 'Blue'),('Arham', 'Green'), ) dict = {} for name, colour in colours:dict[name] = colour print(dict) #output: {'Yasoob': 'Yellow', 'Ali': 'Blue', 'Arham': 'Green'}

以上是dict的最常見用法,構(gòu)造 鍵-值,但是它的缺陷是碰到?jīng)]有遇到的鍵,就會報錯

print(dict['bob']) #output:KeyError: 'bob'

這時候defaultdict就能派上用場了。

classcollections.defaultdict([default_factory[,...]])

defaultdict 是內(nèi)置 dict 類的子類。它重載了一個方法并添加了一個可寫的實例變量。其余的功能與 dict 類相同。

本對象包含一個名為 default_factory 的屬性,構(gòu)造時,第一個參數(shù)用于為該屬性提供初始值,默認為 None。所有其他參數(shù)(包括關鍵字參數(shù))都相當于傳遞給 dict 的構(gòu)造函數(shù)。

根據(jù)定義,defaultdic只是比dict多了一個方法,而這個方法就是__missing__, 這個方法與default_factory有關。

如果 default_factory 屬性為 None,則調(diào)用本方法會拋出 KeyError 異常,附帶參數(shù) key。如果 default_factory 不為 None,則它會被(不帶參數(shù)地)調(diào)用來為 key 提供一個默認值,這個值和 key 作為一對鍵值對被插入到字典中,并作為本方法的返回值返回。

default_factory

本屬性由__missing__()方法來調(diào)用。如果構(gòu)造對象時提供了第一個參數(shù),則本屬性會被初始化成那個參數(shù),如果未提供第一個參數(shù),則本屬性為None。

default_factory可以為很多類型,list、set、str都可以,如果key不存在,返回為默認值。

dict1 = defaultdict(int) dict2 = defaultdict(set) dict3 = defaultdict(str) dict4 = defaultdict(list)print(dict1[1]) print(dict2[1]) print(dict3[1]) print(dict4[1])output: 0 int的默認值 set() set的默認值str的默認值 [] list的默認值

List

使用 list 作為 default_factory,很輕松地將(鍵-值對組成的)序列轉(zhuǎn)換為(鍵-列表組成的)字典:

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)] d = defaultdict(list) for k, v in s:d[k].append(v) print(d)output: defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})

Int

設置 default_factory 為 int,使 defaultdict 用于計數(shù)(類似其他語言中的 bag 或 multiset):

str = 'chinese' d = defaultdict(int) for k in str:d[k] += 1 print(d)output: defaultdict(<class 'int'>, {'c': 1, 'h': 1, 'i': 1, 'n': 1, 'e': 2, 's': 1})

當一個字母首次遇到時,它會查詢失敗,則 default_factory 會調(diào)用 int() 來提供一個整數(shù) 0 作為默認值。后續(xù)的自增操作建立起對每個字母的計數(shù)。

Set

設置 default_factory 為 set 使 defaultdict 用于構(gòu)建 set 集合:

s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)] d = defaultdict(set) for k, v in s:d[k].add(v) print(d)output: defaultdict(<class 'set'>, {'red': {1, 3}, 'blue': {2, 4}})

Lambda

Lambda函數(shù)更為靈活的指定默認值,可以為任意值。

strings = 'chinese' counts = defaultdict(lambda: 0) for i in strings:counts[i] +=1 print(counts)output: defaultdict(<function <lambda> at 0x7fe1b1b3d170>, {'c': 1, 'h': 1, 'i': 1, 'n': 1, 'e': 2, 's': 1})#和int一樣的效果test = defaultdict(lambda : 'hello') test[1] test[2] = 'two' print(test)output: defaultdict(<function <lambda> at 0x7fe338b11170>, {1: 'hello', 2: 'two'})

Tips:

之前的輸出都是連帶著defaultdict里default_factory都輸出了,但是一般沒有必要,只需要使用item。

s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)] d = defaultdict(set) for k, v in s:d[k].add(v) print(d) print(d.items())output: defaultdict(<class 'set'>, {'red': {1, 3}, 'blue': {2, 4}}) dict_items([('red', {1, 3}), ('blue', {2, 4})])
平凡:Python collections 之 Counter?zhuanlan.zhihu.com平凡:Python Collections 之 deque?zhuanlan.zhihu.com

總結(jié)

以上是生活随笔為你收集整理的构造函数= default;_Python Collections之defaultdict 和 default_factory关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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