简介Python的collections模块中defaultdict类型的用法
defaultdict主要用来需要对value做初始化的情形。对于字典来说,key必须是hashable,immutable,unique的数据,而value可以是任意的数据类型。如果value是list,dict等数据类型,在使用之前必须初始化为空,有些情况需要把value初始化为特殊值,比如0或者‘‘。
fromcollectionsimportdefaultdict person_by_age=defaultdict(list) forpersoninpersons: d[person.age].append(person.name)
defaultdict和dict的使用方法一样,只有在初始化的时候必须传入一个callable的对象x,当访问某个还不存在的key时,会把value自动设置成x()。比如上例中,当第一次访问某个年龄的人d[person.age]就会变成list(),也就是[]。
当然也可以使用自己定义的callable对象,比如:
d=defaultdict(lambda:0) d["hello"]+=1#1 d["a"]#0
defaultdict要比dict.set_default效率更高,使用起来也更直观和方便。
标准字典包括一个方法setdefault()来获取一个值,如果值不存在则建立一个默认值。defaultdict初始化容器是会让调用者提前指定默认值。
importcollections defdefault_factory(): return'defaultvalue' d=collections.defaultdict(default_factory,foo='bar') print'd:',d print'foo=>',d['foo'] print'var=>',d['bar']
只要所有键都有相同的默认值,就可以使用这个方法。
上面的结果是:
d:defaultdict(<functiondefault_factoryat0x0201FAB0>,{'foo':'bar'}) foo=>bar var=>defaultvalue