collections模块在内置数据类型(dict、list、set、tuple)的基础上,还提供了几个额外的数据类型:ChainMap、Counter、deque、defaultdict、namedtuple和OrderedDict等。
-
namedtuple:生成可以使用名字来访问元素内容的tuple子类
-
deque:双端队列,可以快速的从另外一侧追加和推出对象
-
Counter:计数器,主要用于计数
-
OrderedDict:有序字典
-
defaultdict:带有默认值的字典
namedtuple
我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:p=(1,2)
但是,看到(1,2),很难看出这个tuple是用来表示坐标的。
那么,我们的namedtuple就能用上了。
namedtuple(\'名称\',‘属性list’)
from collections import namedtuple Point = namedtuple(\'Point\',[\'x\',\'y\']) p = Point(1,2) print(p.x) # 1 print(p.y) # 2
可以验证创建的Point对象是tuple的一种子类:
print(isinstance(p,Point)) # True print(isinstance(p,tuple)) # True
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。deque为了高效实现插入和删除操作的双向列表,适合用于队列和栈。
from collections import deque q = deque([\'a\',\'b\',\'c\',\'d\']) q.append(\'e\') q.appendleft(\'A\') print(q) # deque([\'A\', \'a\', \'b\', \'c\', \'d\', \'e\']) q.pop() q.popleft() print(q) # deque([\'a\', \'b\', \'c\', \'d\'])
defaultdict
使用dict时,如果引用的Key不存在,就会抛出异常。如果希望key不存在时,返回一个默认值,就可以使用defaultdict。
from collections import defaultdict d = defaultdict(lambda:\'N/A\') d[\'key1\'] = \'abc\' print(d[\'key1\']) # abc print(d[\'key2\']) # N/A
注意默认值是调用函数返回的,而函数在创建defaultdict对象是传入。
除了在key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。
OrderDict
使用字典时,key是无序的。在对字典做迭代时,我们无法确定key的顺序。如果要保持key的顺序,可以用OrderedDict
from collections import OrderedDict d = dict([(\'a\',1),(\'b\',2),(\'c\',3)]) print(d) # {\'a\': 1, \'c\': 3,\'b\': 2} dict的key是无序的 od = OrderedDict([(\'a\',1),(\'b\',2),(\'c\',3)]) print(od) # OrderedDict([(\'a\', 1), (\'b\', 2), (\'c\', 3)]) OrderedDict的key是有序的
注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:
from collections import OrderedDict od = OrderedDict() od[\'z\'] = 1 od[\'y\'] = 2 od[\'x\'] = 3 print(od.keys()) # odict_keys([\'z\', \'y\', \'x\'])
Counter
Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。
from collections import Counter c = Counter() for i in \'asdsadsafjzjk\': c[i]+=1 print(c) # Counter({\'a\': 3, \'s\': 3, \'d\': 2, \'j\': 2, \'f\': 1, \'z\': 1, \'k\': 1}) cc = Counter(\'asdsadsafjzjk\') print(cc) # Counter({\'a\': 3, \'s\': 3, \'d\': 2, \'j\': 2, \'f\': 1, \'z\': 1, \'k\': 1})
继续阅读与本文标签相同的文章
浅谈CPU 并行编程和 GPU 并行编程的区别
-
DBengine 排名第一,云数据库 InfluxDB 版正式商业化!
2026-05-19栏目: 教程
-
阿里有个超神秘的组织,CEO们来了都要翻牌 | 开发者必读(056期)
2026-05-19栏目: 教程
-
云原生计算重塑企业IT架构 - 分布式应用架构
2026-05-19栏目: 教程
-
阿里云创新大会再出发,一些变化即将发生
2026-05-19栏目: 教程
-
阿里云的包年包月、按量付费、抢占式实例计费方式是什么,如何选择
2026-05-19栏目: 教程
