Python 的 collections
模块提供了一系列有用的容器数据类型,这些数据类型扩展了内置的字典、列表、集合和元组等数据结构,提供了更丰富的功能。以下是一些常用的 collections
模块中的数据类型及其用法:
namedtuple
namedtuple
是一个工厂函数,用于创建可以通过属性名访问元素内容的元组子类。
from collections import namedtuple
# 创建一个名为Person的namedtuple
Person = namedtuple('Person', ['name', 'age', 'city'])
# 创建一个Person实例
p = Person(name='Alice', age=30, city='New York')
# 访问属性
print(p.name) # 输出: Alice
print(p.age) # 输出: 30
print(p.city) # 输出: New York
deque
deque
是一个双端队列,支持从两端快速添加和弹出元素。
from collections import deque
# 创建一个deque实例
dq = deque()
# 从右端添加元素
dq.append(1)
dq.append(2)
# 从左端添加元素
dq.appendleft(0)
# 从右端弹出元素
print(dq.pop()) # 输出: 2
# 从左端弹出元素
print(dq.popleft()) # 输出: 0
# 当前deque内容
print(dq) # 输出: deque([1])
Counter
Counter
是一个字典子类,用于计数可哈希对象。它是一个集合,其中元素存储为字典的键,计数存储为字典的值。
from collections import Counter
# 创建一个Counter实例
cnt = Counter(['a', 'b', 'c', 'a', 'b', 'b'])
# 访问计数
print(cnt['a']) # 输出: 2
print(cnt['b']) # 输出: 3
# 更新计数
cnt.update(['a', 'd', 'd', 'd'])
print(cnt['a']) # 输出: 3
print(cnt['d']) # 输出: 3
# 获取所有元素及其计数
print(cnt.items()) # 输出: dict_items([('a', 3), ('b', 3), ('c', 1), ('d', 3)])
defaultdict
defaultdict
是一个字典子类,它调用一个工厂函数来提供缺失的值。
from collections import defaultdict
# 创建一个defaultdict实例,默认值为0
dd = defaultdict(int)
# 访问不存在的键,会自动设置为默认值0
print(dd['a']) # 输出: 0
# 更新值
dd['a'] += 1
print(dd['a']) # 输出: 1
# 创建一个defaultdict实例,默认值为空列表
dd_list = defaultdict(list)
dd_list['b'].append(1)
dd_list['b'].append(2)
print(dd_list['b']) # 输出: [1, 2]
OrderedDict
OrderedDict
是一个字典子类,它记住元素被添加的顺序。
from collections import OrderedDict
# 创建一个OrderedDict实例
od = OrderedDict()
# 添加元素
od['a'] = 1
od['b'] = 2
od['c'] = 3
# 按添加顺序遍历
for key, value in od.items():
print(key, value)
# 输出:
# a 1
# b 2
# c 3
# 移动某个键到末尾
od.move_to_end('b')
# 再次遍历
for key, value in od.items():
print(key, value)
# 输出:
# a 1
# c 3
# b 2
ChainMap
ChainMap
将多个字典或其他映射合并为一个视图,允许你像单个字典那样访问它们。
from collections import ChainMap
# 创建多个字典
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
# 创建一个ChainMap实例
cm = ChainMap(d1, d2)
# 访问元素
print(cm['a']) # 输出: 1
print(cm['b']) # 输出: 2
print(cm['c']) # 输出: 4
这些只是 collections
模块中的一些常用容器类型。根据你的需求,你可以选择适合的容器类型来简化代码和提高效率。