14人阅读web
语法:app
class collections.defaultdict([default_factory[, ...]])ide
返回一个新的类字典的对象。函数
defaultdict是内置的dict类的一个子类。 spa
它覆盖一个方法并添加一个可写实例变量。对象
其他的功能与dict类相同,此处未记录。blog
第一个参数提供了default_factory属性的初始值; 它默认为None。get
全部剩余的参数都被视为传递给dict构造函数,包括关键字参数。it
除标准dict操做外,defaultdict对象还支持如下方法:io
__missing__(key)
若是default_factory属性为None,则会以key做为参数引起KeyError异常。
若是default_factory不是None,则不带参数调用他以提供给定键的默认值,将此值插入到键的字典中并返回。
若是调用default_factory引起异常,则此异常将不变的传播。
当找不到请求的键时,此方法由dict类的__getitem __()方法调用;而后由__getitem __()返回或引起它返回或引起的任何内容。
请注意:除__getitem __()以外的任何操做都不会调用__missing __()。 这意味着get()将像普通字典同样,返回None做为默认值,而不是使用default_factory。
defaultdict对象支持如下实例变量:
default_factory
该属性由__missing __()方法使用; 它从构造函数的第一个参数(若是存在)初始化,若是不存在则初始化为None。
defaultdict 举例
使用list做为default_factory,能够很容易地将一系列键值对分组到列表字典中:
当第一次遇到每一个 key 时,它不在映射中; 因此,使用default_factory函数自动建立一个条目,该函数返回一个空列表。
而后 list.append( )操做将该值附加到新列表中。
当再次遇到key时,查找正常进行(返回该key的列表),而且list.append( )操做会向列表添加另外一个值。
这种技术比使用dict.setdefault()的等效技术更简单,更快捷:(看图就懂了 - -!)
将default_factory设置为int可以使defaultdict对计数有用(如其余语言中的bag(包)或multiset(多重集)):
当第一次遇到字母时,它在映射中不存在,所以default_factory函数调用int()以提供默认计数为零。 而后递增操做为每一个字母构建计数。
始终返回零的函数int( )只是常量函数的一个特例。 建立常量函数的更快、更灵活的方法是使用能够提供任何常量值(不单单是零)的lambda函数:
将default_factory设置为set会使defaultdict对构建集合字典颇有用: