Python -- colllection模块

在内置数据类型(dict , list , set , tuple)的基础上,collection模块还提供了几个额外的数据类型:Counter deque defaultdict namedtuple OrderedDict.

  1. namedtuple :生产可以使用名字来访问元素内容的tuple

    from collections import namedtuple
    Point = namedtuple('Point',['x','y'])
    p = Point(1,2)
    print(p.x,p.y)  # 1 2
    
  2. deque : 双端队列,可以快速的从另外一侧追加和退出对象

    # 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
    # deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
    
    from collections import deque
    q = deque(['a','b','c'])
    q.append('d')
    q.appendleft(0)
    print(q)  deque([0, 'a', 'b', 'c', 'd'])
    
    deque除了实现list的append()和pop()外,还支持appendleft()和popleft(),这样就可以非常高效地往头部添加或删除元素。
    
  3. Counter : 计数器,主要用来计数

    # Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。
    from collections import Counter
    s = Counter('asgfdg')
    print(s)
    Counter({'g': 2, 'a': 1, 's': 1, 'f': 1, 'd': 1})
    
  4. OrderedDict : 有序字典

    # 使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用OrderedDict:
    from collections import OrderedDict
    d = dict([('a', 1), ('b', 2), ('c', 3)])
    print(d)  # dict 的字典是无序的
    
    od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(od)  # OrderedDict的字典是有序的
    OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    
  5. defaultdict : 带有默认值的字典

    from collections import defaultdict
    values = [11,22,33,44,55,66,77,88,99]
    dic = defaultdict(list)
    for i in values:
        if i > 66:
            dic['key1'].append(i)
        else:
            dic['key2'].append(i)
    print(dic) 
    defaultdict(<class 'list'>, {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99]})
    
    # 原生字典的解决方法
    l = [11,22,33,44,55,66,77,88,99]
    dic = {}
    for i in l:
        if i > 66:
            if 'key1' not in dic:
                dic['key1'] = []
            dic['key1'].append(i)
        else:
            if 'key2' not in dic:
                dic['key2'] = []
            dic['key2'].append(i)
    print(dic)
    {'key2': [11, 22, 33, 44, 55, 66], 'key1': [77, 88, 99]}
    
原文地址:https://www.cnblogs.com/Agoni-7/p/11135083.html