Python collections.defaultdict模块用法详解
Python中通过Key访问字典,当Key不存在时,会引发‘KeyError'异常。为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值。
语法格式:
collections.defaultdict([default_factory[,…]])
classdefaultdict(Dict[_KT,_VT],Generic[_KT,_VT]):
default_factory:Callable[[],_VT]
该函数返回一个类似字典的对象。defaultdict是Python内建字典类(dict)的一个子类,它重写了方法_missing_(key),增加了一个可写的实例变量default_factory,实例变量default_factory被missing()方法使用,如果该变量存在,则用以初始化构造器,如果没有,则为None。其它的功能和dict一样。
第一个参数为default_factory属性提供初始值,默认为None;其余参数包括关键字参数(keywordarguments)的用法,和dict构造器用法一样。
1.使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。
fromcollectionsimportdefaultdict s=[('yellow',1),('blue',2),('yellow',3),('blue',4),('red',1)] d=defaultdict(list) fork,vins: d[k].append(v) a=sorted(d.items()) printd printa ''' defaultdict(,{'blue':[2,4],'red':[1],'yellow':[1,3]}) [('blue',[2,4]),('red',[1]),('yellow',[1,3])] '''
当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表,list.append()会将值添加进新列表;再次遇到相同的键时,list.append()将其它值再添加进该列表。
这种方法比使用dict.setdefault()更为便捷,dict.setdefault()也可以实现相同的功能。
s=[('yellow',1),('blue',2),('yellow',3),('blue',4),('red',1)] d={} fork,vins: d.setdefault(k,[]).append(v) printd a=sorted(d.items()) printa ''' {'blue':[2,4],'red':[1],'yellow':[1,3]} [('blue',[2,4]),('red',[1]),('yellow',[1,3])] '''
2.defaultdict还可以被用来计数,将default_factory设为int即可。
s='mississippi' d=defaultdict(int) forkins: d[k]+=1 printd a=sorted(d.items()) printa ''' defaultdict(,{'i':4,'p':2,'s':4,'m':1}) [('i',4),('m',1),('p',2),('s',4)] '''
字符串中的字母第一次出现时,字典中没有该字母,default_factory函数调用int()为其提供一个默认值0,加法操作将计算出每个字母出现的次数。
函数int()是常值函数的一种特例,总是返回0。使用匿名函数(lambdafunction)可以更快、更灵活的创建常值函数,返回包括0在内的任意常数值。
defconstant_factory(value): returnlambda:value d=defaultdict(constant_factory('')) printd d.update(name='John',action='ran') printd print'%(name)s%(action)sto%(object)s'%d ''' defaultdict( at0x10c180668>,{}) defaultdict( at0x10c180668>,{'action':'ran','name':'John'}) Johnranto '''
3.default_factory设为set时,可以用defaultdict建立集合字典(adictionaryofsets)
s=[('red',1),('blue',2),('red',3),('blue',4),('red',1),('blue',4)] d=defaultdict(set) fork,vins: d[k].add(v) printd a=sorted(d.items()) printa ''' defaultdict(,{'blue':set([2,4]),'red':set([1,3])}) [('blue',set([2,4])),('red',set([1,3]))] '''
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。