Python中内建模块collections如何使用

  • Post category:Python

下面是关于Python中内建模块collections的使用攻略:

collections模块概述

collections是Python的内建模块之一,提供了一系列有用的集合类。在数据处理中,常用的包括:CounterdefaultdictnamedtupleOrderedDict等。

Counter

Counter可用于统计某个序列中各元素出现的次数,并返回一个字典类型。

from collections import Counter

data = [1, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 5]
count = Counter(data)
print(count)  # 输出: Counter({5: 4, 2: 3, 1: 2, 4: 2, 3: 1})

可以看到,Counter返回的对象是一个dict子类,其中每个元素均为序列的一个元素和该元素出现的次数组成的键值对。在上面的例子中,数据序列为[1, 1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 5],它的Counter返回结果是一个字典,其中数字5出现了4次,数字2出现了3次,以此类推。

defaultdict

defaultdict是一种可以指定默认值的字典类型。如果访问不存在的键,则返回默认值而不是抛出KeyError异常。

from collections import defaultdict

# 定义一个默认值为0的字典
counts = defaultdict(int)
fruits = ['apple', 'banana', 'apple', 'pear', 'pear']
for fruit in fruits:
    counts[fruit] += 1
print(counts)  # 输出: defaultdict(<class 'int'>, {'apple': 2, 'banana': 1, 'pear': 2})

在上面的例子中,我们定义了默认值为0的defaultdict对象。其余使用和常规字典有点类似。

namedtuple

namedtuple 是一个函数,用于创建一个具有命名字段的可命名元组类型。可以认为它是一个定义的类。

from collections import namedtuple

# 定义一个具有 name、age、gender 字段的命名元组类型
Person = namedtuple('Person', ['name', 'age', 'gender'])

# 初始化一个命名元组
p1 = Person('Alice', 25, 'female') 
print(p1.name, p1.age, p1.gender) # 输出: Alice 25 female
p2 = Person(name='Bob', age=30, gender='male')
print(p2.name, p2.age, p2.gender) # 输出: Bob 30 male

在上面的例子中,我们使用namedtuple函数创建了一个Person类型的命名元组。我们可以像使用类一样完成初始化和访问属性字段。

OrderedDict

OrderedDict是一个字典对象,除了具有常规字典的功能之外,还可以保持插入元素顺序。OrderedDict对象可以存储在特定的插入顺序上。

from collections import OrderedDict

# 定义一个普通的字典,键值对的顺序没有保证
d1 = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
print(d1)  # 输出: {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}

# 定义一个OrderedDict对象,键值对的顺序随时可以变化
d2 = OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])
print(d2)  # 输出: OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

在上面的例子中,我们定义了两个字典对象。其中一个是普通的字典,另一个是OrderedDict类。我们可以从 d1d2 的输出结果中看出差异。

以上是collections模块的使用攻略,这些方法在日常编程中非常常用,可以大大提高代码的效率和可读性。