zoukankan      html  css  js  c++  java
  • [Python-tools]defaultdict的使用场景

    Python标准库中collections对集合类型的数据结构进行了非常多拓展操作。这些操作在我们使用集合的时候会带来非常多的便利。多看看非常有优点。

    defaultdict是当中一个方法,就是给字典value元素加入默认类型,之前看到过可是没注意怎么使用,今天特地瞅了瞅。



    首先是各大文章介绍的第一个样例:

    import collections as coll
    
    def default_factory():
        return 'default value'
    
    d = coll.defaultdict(default_factory, foo='bar')
    print 'd:',d
    print 'foo=>', d['foo']
    print 'foo=>', d['bar']   #key为'bar'的元素不存在。会有一个默认值
    输出结果是这种:
    d: defaultdict(<function default_factory at 0x022E6E70>, {'foo': 'bar'})
    foo=> bar
    foo=> default value

    结论:这里能够看到,当我们取字典中一个没有的key的时候就会自己主动依据 default_factory生成一个value。类似于 d.get('bar','default value')


    一个对照的样例:

    假设一个字典中有个map的value是一个set。往这个set连续加入两个元素,使用原始的dict是这种

    dict_set1 = {}
    #假设不知道这个字段中key有没有。须要先推断
    if 'key' not in dict_set1:
        dict_set1['key'] = set()
    dict_set1['key'].add('111')
    dict_set1['key'].add('000')
    print dict_set1

    假设使用defaultdict就是这种

    dict_set = coll.defaultdict(set)
    dict_set['key'].add('000')
    dict_set['key'].add('111')
    print dict_set

    优点就是不须要做set的初始化这个推断了。


    两个使用的小案例

    ss = '1111222233334444'
    dict_int = coll.defaultdict(int)
    for s in ss:
        dict_int[s] += 1
    print dict_int
    
    '''
    官方文档的这个样例就能看到这样的写法的简洁了
    https://docs.python.org/2/library/collections.html#collections.defaultdict
    >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    >>> d = defaultdict(list)
    >>> for k, v in s:
    ...     d[k].append(v)
    ...
    >>> d.items()
    [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
    '''

    当我们做这样的带有统计性质的数据操作时候,这个对象非常好用。

    本文出自 orangleliu笔记本 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38669867


  • 相关阅读:
    MySQL Partition--分区基础
    MySQL Replication--跳过复制错误
    MySQL--SHOW PROCESSLIST
    MySQL InnoDB Engine--缓冲器数据交换
    MySQL InnoDB Engine--数据预热
    MySQL Profiling--常用命令
    Linux--用户管理
    vi和vim快捷键的使用
    vi和vim
    xftp使用
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7371411.html
Copyright © 2011-2022 走看看