4. python Collections -- Defaultdict objects

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

image.png

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

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

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

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

image.png

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

image.png

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

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

image.png

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

image.png

相关文章
相关标签/搜索