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

歡迎訪問 生活随笔!

生活随笔

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

python

Python系列之Collections内置模块(2)

發布時間:2024/10/12 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python系列之Collections内置模块(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

defaultdict 返回一個類 dict 的對象,defaultdict 是內置的 dict 類的子類。

如果訪問 dict 未初始化的 key 值時,會拋出 KeyError 異常。

1 s_tuple = ('a', 'b', 'a', 'a', 2 'c', 'a', 'b', 'a') 3 4 c_dict = {} 5 6 for s in s_tuple: 7 c_dict[s] += 1 8 9 print(c_dict)

輸出如下:

1 Traceback (most recent call last): 2 File "FileNamePath", line 7, in <module> 3 c_dict[s] += 1 4 KeyError: 'a'

對代碼進行修正后如下:

1 s_tuple = ('a', 'b', 'a', 'a', 2 'c', 'a', 'b', 'a') 3 4 c_dict = {} 5 6 for s in s_tuple: 7 if s not in c_dict: 8 c_dict[s] = 1 9 else: 10 c_dict[s] += 1 11 12 print(c_dict)

能夠正常輸出每個 str 出現的統計次數,不過每次循環都要進行判斷當前 dict 中是否存在這個 key 值。不過 dict 的 api 中提供了 setdefault() 方法,該方法需提供兩個參數,第一個為 key 值,第二個為該 key 初始狀態下的默認值。如果字典中不存在此 key 值,則該方法返回默認值,反之返回該 key 值對應的 value。

1 s_tuple = ('a', 'b', 'a', 'a', 2 'c', 'a', 'b', 'a') 3 4 c_dict = {} 5 6 for s in s_tuple: 7 c_dict[s] = c_dict.setdefault(s, 0) + 1 8 9 print(c_dict)

下面引入 defaultdict 的用法,defaultdict 類初始化時接收一個類型作為參數,當訪問的 key 值不存在時,可實例化傳入的類型參數的實例作為默認值。

1 from collections import defaultdict 2 3 d_defaultdict = defaultdict(list) 4 5 print(d_defaultdict) 6 print(d_defaultdict.__getitem__('1')) 7 print(d_defaultdict)

輸出如下:

1 defaultdict(<class 'list'>, {}) 2 [] 3 defaultdict(<class 'list'>, {'1': []})

由于初始化 defaultdict 時,傳入的類型是 list,因此 key 為 '1' 的 value 默認為 [],如果參數為 tuple,那么 value 的默認值為 ()。

需要注意的是,默認值只有通過 defaultdict[key] 或 defaultdict.__getitem__(key) 訪問 defaultdict 時才會被初始化。

extend

問題來了 defaultdict 是如何實現為不存在的 key 值初始化默認值的?

閱讀 _collections.py 源碼中的 class defaultdict(dict) 部分,可以看到一個 def __missing__(self, key) 的實例方法。

源碼如下:

1 def __missing__(self, key): # real signature unknown; restored from __doc__ 2 """ 3 __missing__(key) # Called by __getitem__ for missing key; pseudo-code: 4 if self.default_factory is None: raise KeyError((key,)) 5 self[key] = value = self.default_factory() 6 return value 7 """ 8 pass

由此可見,當通過 __getitem__ 方法訪問 defaultdict 中的某個不存在的 key 值時,會在拋出的 KeyError 異常中進行處理,根據傳入的類型參數返回初始化的 value 值。

那么,這個 __missing__ 方法中的內容可否自己實現呢,不妨試試:

1 class defaultdict_copy(dict): 2 def __missing__(self, key): 3 self[key] = 'default' 4 return 'default' 5 6 7 d_defaultdict_copy = defaultdict_copy() 8 print(d_defaultdict_copy) 9 print(d_defaultdict_copy['1']) 10 print(d_defaultdict_copy)

輸出如下:

1 {} 2 default 3 {'1': 'default'}

很明顯,對于 dict 的繼承類中,存在一個 __missing__ 的實例方法,可以通過重寫該方法實現訪問不存在的 key 值時進行 value 的初始化。

轉載于:https://www.cnblogs.com/ZhangYidada/p/6385634.html

總結

以上是生活随笔為你收集整理的Python系列之Collections内置模块(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 农村脱精光一级 | 色撸撸av | 亚洲第一伊人 | 精品无码一区二区三区免费 | 国产欧美日韩在线 | 美日韩av在线 | 永久av免费 | 亚洲性免费 | 捆绑调教sm束缚网站 | 午夜亚洲成人 | 曰本黄色片| 99精品欧美一区二区三区综合在线 | 欧洲亚洲国产精品 | 免费在线观看网址 | 蜜芽久久| 日本高清视频www | 日韩人妻一区二区三区蜜桃 | av在线天天 | 欧美日韩亚洲色图 | wwwwxxxx欧美 | 久久精品国产露脸对白 | 操操操操操操操 | 日本免费精品视频 | 天堂欧美 | 成人免费性生活视频 | 777亚洲 | аⅴ资源中文在线天堂 | 天天摸天天添 | 亚洲av无码日韩精品影片 | a人片| 色噜噜噜| 午夜第一页| 色成人综合网 | 在线观看av网页 | 中文字幕三区 | 亚洲AV无码成人精品区明星换面 | 人人爽爽人人 | 欧美,日韩,国产精品免费观看 | 黄色综合| 天天摸天天操 | 日本高清网色 | 天海翼视频在线观看 | 爆操日本美女 | 青青在线视频 | 国产男男chinese网站 | 秋霞成人| 欧美视频在线观看一区二区 | 国产在线一二三区 | 亚洲男人第一网站 | 超碰97免费| 日韩视频在线免费 | 99久久久久久久久久 | 新婚若妻侵犯中文字幕 | 琪琪射| 亚洲男人网站 | 日韩在线中文字幕视频 | 精品国产69 | av无码精品一区二区三区宅噜噜 | 清纯粉嫩极品夜夜嗨av | 天堂在线观看免费视频 | 亚洲三级中文字幕 | 美国少妇在线观看免费 | 美女的诞生免费观看在线高清 | 综合五月婷 | 男女做事网站 | 热久久在线 | 香蕉影音| 中文字幕精品国产 | 久久久久久1 | 国产一区精品视频 | av青青草原 | 日本 在线| 少妇一级1淫片 | 中文字幕亚洲高清 | 欧美色综合网站 | 成年人一级黄色片 | 五月婷婷激情在线 | 在线视频日韩精品 | av在线.com| aise爱色av| 国产成人无码精品亚洲 | 精品久久久久久久久久久久久久久久 | 亚洲中文字幕无码av永久 | 久久激情久久 | 中文在线观看免费 | 日韩一级二级 | 欧美女优一区 | 男人午夜免费视频 | 啪视频免费 | 久久福利在线 | jizz在线观看视频 | 国产欧美一区二区三区在线老狼 | 国产精品美女在线观看 | 欧美不卡三区 | 爱情岛亚洲首页论坛 | 亚洲经典久久 | 欧美成人综合一区 | 国产精品九九九九九 | 五月开心网 |