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)
posted on 2024-11-23 00:06  zhaoqiang1980  阅读(3)  评论(0编辑  收藏  举报