博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

collections模块

Posted on 2020-05-20 15:27  cxysailor  阅读(137)  评论(0)    收藏  举报

collections模块1. collections模块封装了一些常用的容器类2. 主要介绍3个:2.1 namedtuple()2.2 defaultdict()2.3 Counter()

collections模块

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)]