zoukankan      html  css  js  c++  java
  • python defaultdict 类型

    在Python里面有一个模块collections,解释是数据类型容器模块。这里面有一个collections.defaultdict()经常被用到。主要说说这个东西。

    综述:

    这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。比如default(int)则创建一个类似dictionary对象,里面任何的values都是int的实例,而且就算是一个不存在的keyd[key] 也有一个默认值,这个默认值是int()的默认值0.

    defaultdict 
    dict subclass that calls a factory function to supply missing values。

    这是一个简短的解释

    defaultdict属于内建函数dict的一个子类,调用工厂函数提供缺失的值。

    用法:

    标准字典包括一个方法setdefault()来获取一个值,如果这个值不存在则建立一个默认值。与之相反,defaultdict初始化容器时会让调用者提前指定默认值

    import collections
    def default_factory():
        return 'default_value'
    
    d=collections.defaultdict(default_factory,foo='bar')
    print 'd:',d
    print 'foo=>',d['foo']
    print 'bar=>',d['bar']

    d: defaultdict(<function default_factory at 0x01BFAB70>, {'foo': 'bar'})
    foo=> bar
    bar=> default_value
    >>> d['key']
    'default_value'
    >>>

    我现在调用d['xx']也会输出default_value

     上面的等同于:

    d=collections.defaultdict(lambda :'default_value',foo='bar')

    只要所有键都有相同的默认值并无不妥,就可以使用这个方法。如果默认值是一种用于聚集或累加值的类型,如list、set或者甚至是int,这个方法尤其有用。标准库文档提供了很多采用这种方式使用defaultdict的例子。

    一般用法:

    需要使用字典作为跟踪数据的容器时,defaultdict对象很有用。例如跟踪字符串s中每个单词的位置。

    >>> from collections import defaultdict

    >>> s="ashin chen C ashin chen C ashin chen C"

    >>> words = s.split()

    >>> wordlocations=defaultdict(list)

    >>> for n, w in enumerate(words):

    ...   wordlocations[w].append(n)

    ...

    >>> wordlocations

    defaultdict(<type 'list'>, {'ashin': [0, 3, 6], 'chen': [1, 4, 7], 'C': [2, 5, 8]})

    >>>

    wordlocations[w]在遇到第一个单词时将失败,但是不会抛出异常,而是调用作为default_factory提供的函数list来创建一个新值。

    相当于wordlocations.setdefault(w, []).append(n)。但是这个速率会慢两倍。

    import collections
    s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    
    # defaultdict
    d = collections.defaultdict(list)
    for k, v in s:
        d[k].append(v)
    
    # Use dict and setdefault    
    g = {}
    for k, v in s:
        g.setdefault(k, []).append(v)

    defaultdict和dict就如同上面。

    http://kodango.com/defaultdict-in-python

    跟多参考:http://www.cnblogs.com/herbert/archive/2013/01/09/2852843.html

  • 相关阅读:
    3dsmax不同版本 pyside qt UI 设置max窗口为父窗口的方法
    oracle中的数据库和实例
    oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)
    什么是WSE
    Server.Transfer,Response.Redirect的区别
    Oracle 中的几个数据类型介绍
    oracle中的连接字符串
    Oracle中的 单引号 和 双引号
    接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?
    聚簇索引
  • 原文地址:https://www.cnblogs.com/youxin/p/3153462.html
Copyright © 2011-2022 走看看