python模块之collections模块

时间:2022-03-25 22:22:20

collections模块


  • collections提供了额外的几种数据类型:

    • namedtuple: 生成可以使用名字来访问元素内容的tuple
    • deque: 双端队列,可以快速的从另外一侧追加和推出对象
    • Counter: 计数器,主要用来计数
    • OrderedDict: 有序字典
    • defaultdict: 带有默认值的字典
  • namedtuple

    • >>> from collections import namedtuple
      >>> Point = namedtuple('Point', ['x', 'y'])
      >>> p = Point(1, 2)
      >>> p.x
      1
      >>> p.y
      2
  •  deque
    • >>> from collections import deque
      >>> q = deque(['a', 'b', 'c'])
      >>> q.append('x')
      >>> q.appendleft('y')
      >>> q
      deque([
      'y', 'a', 'b', 'c', 'x'])

       

  •  Counter
    • c = Counter('abcdeabcdabcaba')
      print c
      输出:Counter({
      'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
  • OrderedDict
>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是无序的
{
'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([(
'a', 1), ('b', 2), ('c', 3)])


# 注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> od.keys() # 按照插入的Key的顺序返回
[
'z', 'y', 'x']
  • defaultdict
      • from collections import defaultdict

        values
        = [11, 22, 33,44,55,66,77,88,99,90]

        my_dict
        = defaultdict(list)

        for value in values:
        if value>66:
        my_dict[
        'k1'].append(value)
        else:
        my_dict[
        'k2'].append(value)
        # 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:

        >>> from collections import defaultdict
        >>> dd = defaultdict(lambda: 'N/A')
        >>> dd['key1'] = 'abc'
        >>> dd['key1'] # key1存在
        'abc'
        >>> dd['key2'] # key2不存在,返回默认值
        'N/A'