亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

Python collections.defaultdict模塊用法詳解

瀏覽:3日期:2022-07-20 16:56:36

Python中通過Key訪問字典,當(dāng)Key不存在時(shí),會(huì)引發(fā)‘KeyError’異常。為了避免這種情況的發(fā)生,可以使用collections類中的defaultdict()方法來為字典提供默認(rèn)值。

語法格式:

collections.defaultdict([default_factory[, …]])class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]):default_factory: Callable[[], _VT]

該函數(shù)返回一個(gè)類似字典的對象。defaultdict是Python內(nèi)建字典類(dict)的一個(gè)子類,它重寫了方法_missing_(key),增加了一個(gè)可寫的實(shí)例變量default_factory,實(shí)例變量default_factory被missing()方法使用,如果該變量存在,則用以初始化構(gòu)造器,如果沒有,則為None。其它的功能和dict一樣。

第一個(gè)參數(shù)為default_factory屬性提供初始值,默認(rèn)為None;其余參數(shù)包括關(guān)鍵字參數(shù)(keyword arguments)的用法,和dict構(gòu)造器用法一樣。

1.使用list作第一個(gè)參數(shù),可以很容易將鍵-值對序列轉(zhuǎn)換為列表字典。

from collections import defaultdicts=[(’yellow’,1),(’blue’, 2), (’yellow’, 3), (’blue’, 4), (’red’, 1)]d=defaultdict(list)for k, v in s: d[k].append(v)a=sorted(d.items())print dprint a’’’defaultdict(<type ’list’>, {’blue’: [2, 4], ’red’: [1], ’yellow’: [1, 3]})[(’blue’, [2, 4]), (’red’, [1]), (’yellow’, [1, 3])]’’’

當(dāng)字典中沒有的鍵第一次出現(xiàn)時(shí),default_factory自動(dòng)為其返回一個(gè)空列表,list.append()會(huì)將值添加進(jìn)新列表;再次遇到相同的鍵時(shí),list.append()將其它值再添加進(jìn)該列表。

這種方法比使用dict.setdefault()更為便捷,dict.setdefault()也可以實(shí)現(xiàn)相同的功能。

s = [(’yellow’, 1), (’blue’, 2), (’yellow’, 3), (’blue’, 4), (’red’, 1)]d={}for k, v in s: d.setdefault(k,[]).append(v)print da=sorted(d.items())print a’’’{’blue’: [2, 4], ’red’: [1], ’yellow’: [1, 3]}[(’blue’, [2, 4]), (’red’, [1]), (’yellow’, [1, 3])]’’’

2.defaultdict還可以被用來計(jì)數(shù),將default_factory設(shè)為int即可。

s = ’mississippi’d = defaultdict(int)for k in s: d[k] += 1print da=sorted(d.items())print a’’’defaultdict(<type ’int’>, {’i’: 4, ’p’: 2, ’s’: 4, ’m’: 1})[(’i’, 4), (’m’, 1), (’p’, 2), (’s’, 4)]’’’

字符串中的字母第一次出現(xiàn)時(shí),字典中沒有該字母,default_factory函數(shù)調(diào)用int()為其提供一個(gè)默認(rèn)值0,加法操作將計(jì)算出每個(gè)字母出現(xiàn)的次數(shù)。

函數(shù)int()是常值函數(shù)的一種特例,總是返回0。使用匿名函數(shù)(lambda function)可以更快、更靈活的創(chuàng)建常值函數(shù),返回包括0在內(nèi)的任意常數(shù)值。

def constant_factory(value): return lambda: valued = defaultdict(constant_factory(’<missing>’))print dd.update(name=’John’, action=’ran’)print dprint ’%(name)s %(action)s to %(object)s’ % d ’’’defaultdict(<function <lambda> at 0x10c180668>, {})defaultdict(<function <lambda> at 0x10c180668>, {’action’: ’ran’, ’name’: ’John’})John ran to <missing>’’’

3.default_factory設(shè)為set時(shí),可以用defaultdict建立集合字典(a dictionary of sets)

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 da=sorted(d.items())print a’’’defaultdict(<type ’set’>, {’blue’: set([2, 4]), ’red’: set([1, 3])})[(’blue’, set([2, 4])), (’red’, set([1, 3]))]’’’

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 看一级毛片国产一级毛片 | 免费高清a毛片 | 精品五夜婷香蕉国产线看观看 | 国产91精品一区二区视色 | 色花堂国产精品第二页 | 免费看日韩欧美一级毛片 | 狠狠五月天 | 亚洲欧美另类在线观看 | 国产精品一区视频 | 欧洲一级毛片免费 | 美国美女黄色片 | 国产精品第五页 | 久久精品道一区二区三区 | 三级网战 | 狠狠色丁香婷婷综合 | 欧美人成毛片在线播放 | 噜噜噜福利视频在线观看 | 欧美真人视频一级毛片 | 麻豆精品在线 | 亚洲淫 | 91porn国产| 青青草99热久久 | 首页亚洲国产丝袜长腿综合 | 丁香亚洲综合五月天婷婷 | 国产v国产v片大片线观看网站 | 免费高清精品国偷自产在线 | 九九视频免费在线 | 国产精品高清视亚洲乱码 | 手机看片福利永久 | 亚洲欧美精品中文字幕 | 日韩国产欧美精品综合二区 | 黄色免费在线观看视频 | 欧美亚洲视频在线观看 | 特一级黄色毛片 | 欧美综合区 | 金发美女与黑人巨大交 | 国产精品综合一区二区三区 | 亚洲特黄| 成人三级影院 | 久久中文字幕综合不卡一二区 | 国产成人精品免费视频大全五级 |