外语不好,机翻勿喷,方便回顾 (逃~
语法:
class collections.defaultdict([default_factory[, ...]])
返回一个新的类似字典的对象。 defaultdict是内置的dict类的一个子类。 它覆盖一个方法并添加一个可写实例变量。 其余的功能与dict类相同,这里没有记录。
第一个参数提供了default_factory属性的初始值; 它默认为None。 所有其余参数的处理方式与将它们传递给字典构造函数(包括关键字参数)相同。
除标准字典操作外,defaultdict对象还支持以下方法:
__missing__(key)
如果default_factory属性为None,则会引发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()操作将该值附加到新列表中。
当再次遇到密钥时,查找正常进行(返回该密钥的列表),并且list.append()操作向列表添加另一个值。
这种技术比使用dict.setdefault()的等效技术更简单快捷:(看图就懂了 - -!)
将default_factory设置为int可使defaultdict对计数有用(如其他语言中的bag或multiset):
当第一次遇到字母时,它在映射中不存在,因此default_factory函数调用int()以提供默认计数为零。 增量操作然后为每个字母建立计数。
总是返回零的函数int()只是常量函数的特例。 创建常量函数的更快更灵活的方法是使用可以提供任何常量值(不仅仅是零)的lambda函数:
设置default_factory可以使defaultdict用于构建集合的字典: