14人阅读

语法:

    class collections.defaultdict([default_factory[...]])

    返回一个新的类字典的对象。

    defaultdict是内置的dict类的一个子类。 

    它覆盖一个方法并添加一个可写实例变量。

    其余的功能与dict类相同,此处未记录。

    第一个参数提供了default_factory属性的初始值; 它默认为None。

    所有剩余的参数都被视为传递给dict构造函数,包括关键字参数。


除标准dict操作外,defaultdict对象还支持以下方法:

    __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,可以很容易地将一系列键值对分组到列表字典中:

4. python Collections -- Defaultdict objects_第1张图片

    当第一次遇到每个 key 时,它不在映射中; 所以,使用default_factory函数自动创建一个条目,该函数返回一个空列表。

    然后 list.append( )操作将该值附加到新列表中。 

    当再次遇到key时,查找正常进行(返回该key的列表),并且list.append( )操作会向列表添加另一个值。 

    这种技术比使用dict.setdefault()的等效技术更简单,更快捷:(看图就懂了 - -!)

4. python Collections -- Defaultdict objects_第2张图片

    将default_factory设置为int可使defaultdict对计数有用(如其他语言中的bag(包)或multiset(多重集)):

4. python Collections -- Defaultdict objects_第3张图片

    当第一次遇到字母时,它在映射中不存在,因此default_factory函数调用int()以提供默认计数为零。 然后递增操作为每个字母构建计数。

    始终返回零的函数int( )只是常量函数的一个特例。 创建常量函数的更快、更灵活的方法是使用可以提供任何常量值(不仅仅是零)的lambda函数:

4. python Collections -- Defaultdict objects_第4张图片

    将default_factory设置为set会使defaultdict对构建集合字典很有用:

4. python Collections -- Defaultdict objects_第5张图片