collections
该模块实现专门的容器数据类型,提供Python通用内置容器(dict,set,list,tuple
)的替代方案。
nametuple() |
工厂函数用于创建带有命名字段的元组子类 |
---|---|
deque() |
列表式容器,在两端有快速附加和弹出 |
ChainMap() |
类似于类的类,用于创建多个映射的单个视图 |
Counter () |
dict子类用于计算hashable对象 |
OrderedDict () |
dict子类,记住已添加的条目的顺序 |
defaultdict () |
dict子类调用一个工厂函数时提供缺失值 |
UserDict () |
包装字典对象,更容易dict子类化 |
UserList () |
包装列表对象以方便列表子类化 |
UserString() |
包装字符串对象,更容易字符串子类化 |
ChainMap
ChainMap
用来将多个dict(字典)组成一个list(只是比喻),可以理解成合并多个字典,但和update
不同,而且效率更高。
ChainMap
用来将多个dict组成一个list之后,多个dict之间的键不冲突。当多个dict有重复键时,使用get方法:如chainMap.get('name')
将会返回第一个dict[‘name’]。
1 | # 新建ChainMap及它的结构 |
Counter
Counter是一个简单的计数器,使用起来非常方便。
1 | from collections import Counter |
deque
deque就是一个双端队列,与list非常相似,不过可以同时在list的左边增删元素,支持线程安全 ,从队列两端添加或弹出元素的复杂度都是O(1),而从列表的头部插入或移除元素时,列表的复杂度为O(N)。 deque和list从中部处理数据复杂度都为为O(N)。
1 | In[72]: dq = deque('abc') |
defaultdict
使用 list
作为 default_factory
,很容易将键值对的序列分组到列表的字典,类似setdefault
当第一次遇到每个键时,它不在映射中;因此使用返回空 list
的 default_factory
函数自动创建一个条目。然后,list.append()
操作将值附加到新列表。当再次遇到键时,查找继续正常(返回该键的列表),list.append()
操作将另一个值添加到列表。这种技术比使用 dict.setdefault()
的等效技术更简单和更快
1 | from collections import defaultdict |
1 | d = {} |
将 default_factory
设置为int
使 defaultdict
可用于计数,当首次遇到字母时,映射中缺少字母,因此 default_factory
函数调用 int()
以提供默认计数为零。增量操作然后建立每个字母的计数。
1 | 'mississippi' s = |
将 default_factory
设置为 set
使得 defaultdict
可用于构建集合的字典
1 | 'red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)] s = [( |
OrderedDict
有序字典与常规字典类似,但它们记住项目插入的顺序。在对有序字典进行迭代时,项目按它们的键首次添加的顺序返回。