• Python中的collections模块


    Python中内置了4种数据类型,包括:list,tuple,set,dict,这些数据类型都有其各自的特点,但是这些特点(比如dict无序)在一定程度上对数据类型的使用产生了约束,在某些使用场景下效率会比较低,比如有时候我们可能需要维护一个有序的字典等情况。
    在这种场景下我们可以使用Python内建的collections模块,它包括了很多有用的集合类,合理的使用可以提高我们代码的运行效率。

    接下来主要对collections模块中的常用集合类进行介绍,调用collections模块:

    from collections import *
    

    defaultdict

    dict在使用时,当key值不存在时,直接添加value时会出现错误,使用defaultdict可以很好的规避该错误。defaultdict是对字典类型的补充,它可以给字典的值设置一个类型,当key不存在时可以自动生成相应类型的value
    举例:

    from collections import defaultdict
    
    test_data = (
        ('cat', 2),
        ('dog', 5),
        ('sheep', 3),
        ('cat', 1),
        ('sheep', 2)
    )
    
    test_data_dict = defaultdict(list)
    
    for name, num in test_data:
        test_data_dict[name].append(num)
        
    print test_data_dict
    

    orderedDict

    在Python3.6之前的字典是无序的,但是有时候我们需要保持字典的有序性,orderDict可以在dict的基础上实现字典的有序性,这里的有序指的是按照字典key插入的顺序来排列,这样就实现了一个先进先出的dict,当容量超出限制时,先删除最早添加的key。
    举例:

    #orderedDict
    original_dict = {'a': 2, 'b': 4, 'c': 5}
    for key, value in original_dict.items():
        print key, value
    
    ordered_dict = OrderedDict([('a', 2), ('b', 4), ('c', 5)])
    for key, value in ordered_dict.items():
        print key, value
    

    可以看到orderDict是按照字典创建时的插入顺序来排序。

    deque

    Python中的list是基于数组实现的,所以,查找容易,但是插入和删除操作时间复杂度较大。
    deque就是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,而且线程安全。
    list只提供了append和pop方法来从list的尾部插入或者删除元素,deque新增了appendleft/popleft等方法可以更高效的在元素的开头来插入/删除元素。
    举例:

    from collections import deque
    d = deque([1,2,3,4,5])
    d.extendleft([0])
    print d
    d.extend([6,7])
    d.popleft()
    print d
    

    可以进行双向操作元素,十分方便。

    Counter

    字典子类,为可以哈希的对象计数。
    举例:

    from collections import Counter
    
    test_counter_data = ['cat', 'dog', 'sheep', 'cat', 'dog']
    counter_data = Counter()
    
    for item in test_counter_data:
        counter_data[item] += 1
        
    print counter_data
    

    可以实现对一个对象中的元素进行计数。

    namedtuple

    元组子类。
    我们知道,Python中元组的一个重要特征就是元素不可增删改,而查找tuple元素时一般采取索引。
    使用namedtuple(typename, field_name)可以命名tuple中的元素,之后便可使用名字来查找tuple中的值,有点类似于字典中的查找。
    举例:

    from collections import namedtuple
    animal = namedtuple('animal', 'type age')
    mark = animal(type='dog', age=2)
    print mark.type
    

    使用namedtuple可以提高代码的可读性和文档性。

    以上,是collections模块中的常用集合类。

  • 相关阅读:
    java中常量定义在interface中好还是定义在class中
    CharacterEncodingFilter-Spring字符编码过滤器
    Integer判断相等,到底该用==还是equals
    ThreadLocal实现session中用户信息 的线程间共享
    分布式部署引发的问题
    分布式部署
    LogBack通过MDC实现日志记录区分用户Session
    Fragment 简介 基础知识 总结 MD
    直播 相关技术文章 相关调研文章
    直播 背景 技术体系 乐视云直播Demo
  • 原文地址:https://www.cnblogs.com/ybjourney/p/9020983.html
Copyright © 2020-2023  润新知