Python模块之collections

本文深入讲解Python的collections模块,涵盖namedtuple、deque、Counter、OrderedDict及defaultdict等高级数据结构的使用方法与应用场景,帮助读者提升数据处理能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

collections模块

Python3中,在内置数据类型:字典(dict),列表(list),集合(set),元组(tuple),的基础上,collections模块还提供了几个额外封装的数据类型: Counter,deque,defaultdict,namedtuple,OrderDict等

namedtuple

  • 生成能够使用名字来访问元素的元组(tuple)
  • 从名字可以理解,带名字的元组,即我们可以通过name来取值
  • 官方文档解释: 返回一个具有命名字段的元组的新子类
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
In [1]: # 从collections模块中导入namedtuple                                    
 
In [2]: from collections import namedtuple                                     
 
In [3]: # 创建新的元组子类                                                     
 
In [4]: Point = namedtuple('Point', ['name', 'age'])                           
 
In [5]: p = Point('zs', 18)                                                    
 
In [6]: # 通过name取值                                                         
 
In [7]: p.name                                                                 
Out[7]: 'zs'
 
In [8]: p.age                                                                  
Out[8]: 18


deque

  • 双向队列,可以快速的从另外一侧追加和推出对象
  • 使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为列表是线性存储,数量大的时候,插入和删除的效率很低.
  • deque就是为了高效实现插入和删除操作的双向列表,适合用于队列和栈.
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
In [1]: # 从collections模块中导入deque                                         
 
In [2]: from collections import deque                                          
 
In [3]: # 创建双向队列                                                         
 
In [4]: q = deque(['a', 'b', 'c'])                                             
 
In [5]: # 从最后插入                                                           
 
In [6]: q.append('d')                                                          
 
In [7]: # 从头插入                                                             
 
In [8]: q.appendleft('0')                                                      
 
In [9]: q                                                                      
Out[9]: deque(['0', 'a', 'b', 'c', 'd'])


Counter

  • Counter类的目的是用来统计容器中值出现的次数;
  • 它是一个无序的容器类型,以字典的键值对形式存储;
  • 其中元素作为key,其计数作为value;
[Python] 纯文本查看 复制代码
?
1
2
3
4
5
6
In [1]: from collections import Counter                                        
 
In [2]: data = Counter('fsadjkfskdjlakjfdkl')                                  
 
In [3]: data                                                                   
Out[3]: Counter({'f': 3, 's': 2, 'a': 2, 'd': 3, 'j': 3, 'k': 4, 'l': 2})



OrderedDict

  • 有序字典,顾名思义,Python原本的字典是无序的,在对字典进行迭代时,key的顺序是无法控制的,这时候我们可以利用OrderedDict来实现我们的目标
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
# 从collections模块中盗图OrderedDict
>>> from collections import OrderedDict
# 创建一个无序字典
>>> d = dict([('a',1),('b',2),('c',3)])
>>> d # dict的key是无序的
{'a':1,'c':3,'b':2}
# 创建一个有序字典
>>> od = OrderedDict([('a',1),('b',2),('c',3)])
>>> od  # OrderedDict的key是有序的
OrderedDict([('a',1),('b',2),('c',3)])



OrderedDict的key会按照插入的顺序排序,不是key本身排序

[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
In [1]: from collections import OrderedDict                                    
 
In [2]: od = OrderedDict()                                                     
 
In [3]: od                                                                     
Out[3]: OrderedDict()
 
In [4]: # 插入键值对                                                           
 
In [5]: od['z'] = 1                                                            
 
In [6]: od['y'] = 2                                                            
 
In [7]: od['x'] = 3                                                            
 
In [8]: od.keys()  # 按照插入的key的顺序返回                                   
Out[8]: odict_keys(['z', 'y', 'x'])
 
In [9]: od                                                                     
Out[9]: OrderedDict([('z', 1), ('y', 2), ('x', 3)])


defaultdict

  • 带有默认值的字典
  • 当我们使用字典,通过key来获取数据时,如果key不存在,会抛出KeyError异常,如果希望Key不存在时,返回一个默认追,就可以使用defaultdict
[Python] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
In [1]: # 从collections 模块导入defaultdict                                    
 
In [2]: from collections import defaultdict                                    
 
In [3]: # 创建带默认值的字典                                                   
 
In [4]: dd = defaultdict(lambda: None) # 不存在返回None                        
 
In [5]: # 为创建的字典添加键值对                                               
 
In [6]: dd['name'] = 'qiangzai'                                                
 
In [7]: # key不存在自动添加返回默认值                                          
 
In [8]: dd['name']                                                             
Out[8]: 'qiangzai'
 
In [9]: dd['age']                                                              
 
In [10]: dd                                                                    
Out[10]: defaultdict(<function __main__.<lambda>()>, {'name': 'qiangzai', 'age': None})
 
In [11]: dict(dd)                                                              
Out[11]: {'name': 'qiangzai', 'age': None}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值