collections
是 Python 标准库中的一个模块,它提供了许多有用的容器数据类型,这些类型是对内置类型的扩展或补充。以下是 collections
模块中一些常用的类和它们的基本用法:
导入模块
首先,你需要导入 collections
模块:
python复制代码
|---|----------------------|
| | import collections
|
常用类和用途
-
namedtuple
namedtuple
是一个工厂函数,用于创建可以通过属性名访问元素内容的元组子类。它使得代码更加清晰和可读。python复制代码
|---|-------------------------------------------------------|
| |Point = collections.namedtuple('Point', ['x', 'y'])
|
| |p = Point(1, 2)
|
| |print(p.x, p.y) # 输出: 1 2
| -
deque
deque
是一个双端队列,支持从两端快速添加和删除元素。它对于实现队列和栈非常有用。python复制代码
|---|--------------------------------|
| |d = collections.deque()
|
| |d.append(1)
|
| |d.appendleft(2)
|
| |print(d) # 输出: deque([2, 1])
|
| |print(d.pop()) # 输出: 1
|
| |print(d.popleft()) # 输出: 2
| -
Counter
Counter
是一个字典子类,用于计数可哈希对象。它是一个集合,其中元素存储为字典的键,而它们的计数存储为字典的值。python复制代码
|---|------------------------------------------------------------|
| |c = collections.Counter(['a', 'b', 'c', 'a', 'b', 'b'])
|
| |print(c) # 输出: Counter({'b': 3, 'a': 2, 'c': 1})
|
| |print(c['a']) # 输出: 2
|
| |c['d'] += 1
|
| |print(c) # 输出: Counter({'b': 3, 'a': 2, 'c': 1, 'd': 1})
| -
defaultdict
defaultdict
是一个字典子类,它调用一个工厂函数来提供缺失的键的值。这避免了在访问不存在的键时抛出KeyError
。python复制代码
|---|-------------------------------------------|
| |dd = collections.defaultdict(int)
|
| |dd['a'] += 1
|
| |print(dd['a']) # 输出: 1
|
| |print(dd['b']) # 输出: 0,因为默认值是 int 类型的 0
| -
OrderedDict
OrderedDict
是一个字典子类,它记住了元素被添加的顺序。这对于需要保持元素插入顺序的场景非常有用。python复制代码
|---|----------------------------------|
| |od = collections.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
| -
ChainMap
ChainMap
将多个字典或映射对象组合成一个视图,以便可以像单个字典一样进行查找操作。它首先查找第一个映射,如果找不到,则查找下一个,依此类推。python复制代码
|---|----------------------------------------------------------|
| |c = collections.ChainMap({'a': 1}, {'b': 2}, {'a': 3})
|
| |print(c['a']) # 输出: 1,因为第一个映射中有 'a'
|
| |print(c['b']) # 输出: 2,因为第二个映射中有 'b'
|
| |print(list(c.keys())) # 输出: ['a', 'b'],按第一个映射中的顺序
| -
UserDict, UserList, UserString
这些类分别是对内置
dict
,list
, 和str
类型的封装,提供了更多的灵活性来扩展或修改它们的行为。它们通常用于需要继承内置类型并添加额外功能的情况。python复制代码
|---|-------------------------------------------|
| |class MyDict(collections.UserDict):
|
| |def __missing__(self, key):
|
| |return 'default_value' # 当访问不存在的键时返回默认值
|
| | |
| |mydict = MyDict()
|
| |print(mydict['a']) # 输出: default_value
|
通过使用 collections
模块中的这些类和函数,你可以更有效地处理数据,并编写更清晰、更具可读性的代码。