collections模块1. collections模块封装了一些常用的容器类2. 主要介绍3个:2.1 namedtuple()2.2 defaultdict()2.3 Counter()
1. collections模块封装了一些常用的容器类
这个模块实现专业集装箱数据类型提供替代Python的通用内置容器,字典,列表,集和元组
2. 主要介绍3个:
| 容器类 | 说明 |
|---|---|
| namedtuple() | 命名元组,一个元组的子类 可以使用属性的形式引用元组的元素 |
| defaultdict() | 默认值字典 当访问的键值对不在字典中时,提供一个默认的键值对并将其写入到字典中 |
| Counter() | 计数器 |
2.1 namedtuple()
1 namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
1 from collections import namedtuple as nt 2 3 # 创建一个命名元组对象Rectangle 4 Rectangle = nt('Rectangle', ['length', 'width']) 5 # 实例化 6 r = Rectangle(10, width=5) # 可以使用位置参数和/或关键字参数 7 # 通过属性访问元组元素 8 print('Length of rectangle is: %d ' % r.length) 9 print('Width of rectangle is: %d ' % r.width) 10 # 也可以像普通元组通过索引来访问元组元素 11 print('Area of rectangle is: %d ' % (r[0] * r[1])) 12 # 解包 13 l, w = r 14 print(l, w) 15 # 转换成字典 16 d = r._asdict() 17 print(d['length']) 18 # 从字典转换回来 19 Rectangle(**d) 20 21 # 输出结果: 22 Length of rectangle is: 10 23 Width of rectangle is: 5 24 Area of rectangle is: 50 25 10 5 26 10
2.2 defaultdict()
当访问的键值对不在字典中时,提供一个默认的键值对并将其写入到字典中
可以使用内置函数或者自定义函数(不能有参数)作为默认值
1 """使用内置函数作为默认字典""" 2 from collections import defaultdict as dd 3 4 # 以内置函数作为默认参数创建一个字典 5 default_dict = dd(int, name='Andy', age=10) 6 # 访问其中存在的元素 7 print(default_dict['name']) 8 print(default_dict['age']) 9 # 当访问其中不存在的元素时,普通字典会报错提示不存在 10 # 而defaultdict会将默认参数的值赋给不存在的键addr,并以键值对写入该字典 11 print(default_dict['addr']) # {'addr': 0}写入到字典中 12 print(default_dict) 13 14 # 输出结果: 15 Andy 16 10 17 0 18 defaultdict(<class 'int'>, {'name': 'Andy', 'age': 10, 'addr': 0})
1 """使用自定义函数(不能有参数)作为默认字典""" 2 from collections import defaultdict as dd 3 4 5 # 定义一个函数,不能有参数 6 def f(): 7 return 'Hello' 8 9 10 # 以自定义函数作为默认参数创建一个字典 11 default_dict = dd(f, name='Andy', age=10) 12 # 访问其中存在的元素 13 print(default_dict['name']) 14 print(default_dict['age']) 15 # 当访问其中不存在的元素时,普通字典会报错提示不存在 16 # 而defaultdict会将默认参数的值赋给不存在的键addr,并以键值对写入该字典 17 print(default_dict['addr']) # {'addr': 'Hello'}写入到字典中 18 print(default_dict) 19 20 # 输出结果: 21 Andy 22 10 23 Hello 24 defaultdict(<function f at 0x000002105A70D2F0>, {'name': 'Andy', 'age': 10, 'addr': 'Hello'})
2.3 Counter()
1 """计数器""" 2 from collections import Counter 3 4 # 接收一个可哈希对象,并统计其中每个单元的个数 5 c = Counter('12tangotuple3121') 6 print(c) 7 # 获取个数前3的 8 print(c.most_common(3)) 9 10 # 输出结果: 11 Counter({'1': 3, '2': 2, 't': 2, 'a': 1, 'n': 1, 'g': 1, 'o': 1, 'u': 1, 'p': 1, 'l': 1, 'e': 1, '3': 1}) 12 [('1', 3), ('2', 2), ('t', 2)]
浙公网安备 33010602011771号