collections模块

collections模块使用专业集装箱数据类型替代Python的通用内置数据类型,dictlist, set,和tuple等

deque

所谓双端队列,就是两端都能操作,与Python内置的list区别在于:头部插入与删除的时间复杂度为O(1)

拥有几乎所有list的方法,但deque可以选择从左或者从右开始

还具备一些其他功能:

rotate:所有元素整体向左或右移动n个位置(如果n为负值,则向左)

reverse:反转所有元素位置

 

defaultdict接受一个工厂函数作为参数,如下来构造:

dict = defaultdict(factory_function)

这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set(),int对应0,如下举例:

from collections import defaultdict

dict1 = defaultdict(int)

dict2 = defaultdict(set)

dict3 = defaultdict(str)

dict4 = defaultdict(list)

对应的值分别为:

0

set()

(空字符串)

[]

再一个例子:

members = [

# sex, name

['male', 'John'],

['male', 'Jack'],

['female', 'Lily'],

['male', 'Pony'],

['female', 'Lucy'],

]

result = defaultdict(list)

for sex, name in members:

    result[sex].append(name)

    print(result)

 

Counter

a sequence of items, a dictionary containing keys and counts, or using keyword arguments that map string names to counts.

提供了一种计数器工具来支持便捷而快速的计数。

Counter是dict的子类,所以操作同dict,在此基础上,又添加了most_common(),elements().

elements: 返回所有元素(原始不去重)的迭代器

most_common(): count前n的元素

 

OrderedDict:

dict这个数据结构由于hash的特性,是无序的,这在有的时候会给我们带来一些麻烦, 幸运的是,collections模块为我们提供了OrderedDict,当你要获得一个有序的字典对象时,用它就对了

Remember the Order Keys are Added to a Dictionary

python3.6之后也会对dict顺序做记录

OrderedDict作为dict子类,拥有大多dict的方法,另外增加了一些:move_to_end和clear

>>> p

OrderedDict([('b', 2), ('c', 3), ('apple', 4), ('banana', 5), ('cat', 6)])

# move_to_end

>>> p.move_to_end('b')

>>> p

OrderedDict([('c', 3), ('apple', 4), ('banana', 5), ('cat', 6), ('b', 2)])

>>> p.clear()

>>> p

OrderedDict()

 

namedtuple()

Tuple Subclass with Named Fields

namedtuple为每个成员分配名称以及数字索引,增强了按名称访问元素的可读性,尤其是当tuple数据长度很大时。

例子:

from collections import namedtuple

# 定义一个namedtuple类型User,并包含name,sex和age属性

User = namedtuple('User', ['name', 'sex', 'age'])

# 创建一个User对象

user = User(name='quincy', sex='male', age=24)

# 通过一个list来创建User对象,需使用“_make”方法

user = User._make(['quincy', 'male', 24])

你可能感兴趣的:(python)