黑马程序员技术交流社区

标题: 【上海校区】Python模块之collections [打印本页]

作者: qiangzai    时间: 2019-9-27 08:46
标题: 【上海校区】Python模块之collections
collections模块
Python3中,在内置数据类型:字典(dict),列表(list),集合(set),元组(tuple),的基础上,collections模块还提供了几个额外封装的数据类型: Counter,deque,defaultdict,namedtuple,OrderDict等
namedtuple
[Python] 纯文本查看 复制代码
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
[Python] 纯文本查看 复制代码
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
[Python] 纯文本查看 复制代码
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] 纯文本查看 复制代码
# 从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] 纯文本查看 复制代码
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
[Python] 纯文本查看 复制代码
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}









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2