collections模块常用类清单及示例
一、Counter类
用途:用于对数据进行统计,并能自动按照元素出现次数进行排序。还可通过update方法继续添加数据进行统计,以及使用most_common方法获取出现次数最多的前几个元素。
示例代码:
python
复制
from collections import Counter
# 对字符串中的字符进行统计
result = Counter("sfasfsfsdfdsfdsfsfdsfwkjewrjwi")
print(result)
# 加入更多数据接着统计
result.update("sdfsdfsd")
print(result)
# 获取出现次数最多的前3个元素
print(result.most_common(3))
二、defaultdict类
用途:帮助我们创建一个默认值为统一类型的字典,避免在访问不存在的键时因未定义值类型和初始值而报错,简化了对字典值进行某种操作(如计数)的过程。
示例代码:
python
复制
# 要把list转dict并计算列表中元素重复个数(常规方式)
list_t = ["A", "C", "B", "F", "B"]
dicts_t = {}
for item in list_t:
dicts_t.setdefault(item, 0)
dicts_t[item] += 1
print(dicts_t)
# 使用defaultdict实现上述功能(更简单化这个过程)
from collections import defaultdict
dic_b = defaultdict(int)
for item in list_t:
dic_b[item] += 1
print(dic_b)
三、deque类(双队列)
用途:一般用于实现先进后出的队列操作,插入和移除数据比常规列表快,但遍历查找性能相对较差。
示例代码:
点击查看代码
python
复制
from collections import deque
my_que = deque(["A", "B", "C", "D"])
print(my_que)
my_que.append("F")
print(my_que)
my_que.pop()
print(my_que)
四、namedtuple类
用途:快捷帮助我们生成一个类似常用的Class对象类,适用于需要输出一个简单对象但又不想完整定义一个类的情况,类似一次性使用的对象。
示例代码:
点击查看代码
python
复制
import logging
logging.basicConfig(level="INFO")
# 传统写法定义类并创建对象
class Student():
def __init__(self, name, age) -> None:
self.name = name
self.age = age
def __str__(self) -> str:
return f"name:{self.name},age:{self.age}"
student = Student("zhangsan", 15)
print(student)
# 使用collection的namedtuple创建类似对象
from collections import namedtuple
User = namedtuple("User", ["name", "age"])
user1 = User("lisi", 20)
user2 = User("wangwu", 30)
logging.info(user1)
五、OrderedDict类
用途:能够保证字典的插入顺序,并非是对字典按照键或值进行排序。不过在 Python 3.7 版本及以上,普通字典已经是按照插入顺序写入,所以OrderedDict的使用场景相对减少。
示例代码:
点击查看代码
python
复制
from collections import OrderedDict
my = {"A": 1, "F": 4, "G": 3, "B": 8}
my["G"] = 6
print(my)
my_order = OrderedDict(my)
my_order["H"] = 2
my_order.move_to_end("F")
print(my_order)