zoukankan      html  css  js  c++  java
  • collections模块

    collections模块

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

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

    2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

    3.Counter: 计数器,主要用来计数   (不重要可以忘记)

    4.OrderedDict: 有序字典

    5.defaultdict: 带有默认值的字典

    1.namedtuple:   定义方法:   namedtuple('名称', [属性list]):

    们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:

     

    p = (1,2)
    print(p)
    #(1, 2)

    但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的。

    这时,namedtuple就派上了用场:

    import collections
    port = collections.namedtuple('por',['x','y'])
    p = port(1,2)
    print(p.x)
    print(p.y)

    #1
    #2

    2.deque:

    使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

    deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

    import collections
    lis = collections.deque(['a','b','c','d'])
    lis.append('x')
    print(lis)   #deque(['a', 'b', 'c', 'd', 'x'])
    lis.appendleft('z')
    print(lis)  #deque(['z', 'a', 'b', 'c', 'd', 'x'])

    deque除了实现list的append()pop()外,还支持appendleft()popleft(),这样就可以非常高效地往头部添加或删除元素。

    3.OrderedDict:

    使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

    如果要保持Key的顺序,可以用OrderedDict

    import collections
    d = dict([('x',1),('y',2),('z',3)])
    print(d) #{'x': 1, 'y': 2, 'z': 3}
    
    od = collections.OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(od) #OrderedDict([('a', 1), ('b', 2), ('c', 3)])

    4.defaultdict :

    有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

    即: {'k1': 大于66 'k2': 小于66}
    values = [11, 22, 33,44,55,66,77,88,99,90]
    my_dict = {}
    for value in values:
        if value>66:
            if my_dict.get('k1'):
                my_dict['k1'].append(value)
            else:
                my_dict['k1'] = [value]
        else:
            if my_dict.get('k2'):
                my_dict['k2'].append(value)
            else:
                my_dict['k2'] = [value]
    print(my_dict)
    # {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]}

    使dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用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)
    
    print(my_dict) #defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})
    View Code

    使dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

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

    5.Counter:

    Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

    c = Counter('abcdeabcdabcaba')
    print c
    输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})
  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/zhaojingyu/p/9001743.html
Copyright © 2011-2022 走看看