图片由编辑提供
Python 拥有一个名为 collections 的模块,其中包含不同类型的容器。容器是一个 Python 对象,它包含不同的对象,并实现了一种检索这些对象和对它们进行迭代的方法。
在本教程中,我们将深入探讨由 collections 模块实现的不同类型的容器。
-
Counters
-
OrderedDict
-
DefaultDict
-
ChainMap
-
NamedTuple
-
DeQue
Counter 是 dict 的子类,用于在无序字典中保持可迭代对象中元素的计数,其中键表示元素,值表示该元素在可迭代对象中的计数
为了初始化一个计数器对象,我们使用 counter() 函数,它可以以以下方式调用
from collections import Counter
1) 使用项的序列
counter = Counter(['D','C','C','E','E','E','A','A','X'])
print(counter)
输出:
Counter({'D': 1, 'C': 2, 'E': 3, 'A': 2, 'X': 1})
2) 使用字典
counter = Counter({'X':3,'Y':2,'Z':1})
print(counter)
输出:
Counter({'X': 3, 'Y': 2, 'Z': 1})
3) 使用关键字参数
counter = Counter(X=3,Y=2,Z=1)
print(counter)
输出:
Counter({'X': 3, 'Y': 2, 'Z': 1})
OrderedDict 是 dict 的子类,但不同于普通字典,它们记住键插入的顺序
from collections import OrderedDict
orderdict = OrderedDict()
orderdict["x"] = 2
orderdict["y"] = 3
orderdict["z"] = 4
print(orderdict)
输出:
OrderedDict([('x', 2), ('y', 3), ('z', 4)])
1) 当在现有有序字典中插入新项目时,新项目会附加在字典的末尾,从而保持字典的顺序
orderdict["v"] = 5
print(orderdict)
输出:
OrderedDict([('x', 2), ('y', 3), ('z', 4), ('v', 5)])
2) 当从现有有序字典中删除一个项目并重新插入相同的项目时,该特定项目会被插入到字典的末尾
del orderdict["x"]
print(orderdict)
输出:
OrderedDict([('y', 3), ('z', 4), ('v', 5)])
orderdict["x"] = 2
print(orderdict)
输出:
OrderedDict([('y', 3), ('z', 4), ('v', 5), ('x', 2)])
3) 当重新分配或更新 OrderedDict 对象中现有键值对的值时,键的位置保持不变,但键的值会更新
orderdict.update(z = "four")
print(orderdict)
输出:
OrderedDict([('y', 3), ('z', 'four'), ('v', 5), ('x', 2)]
DefaultDict 是 dict 的子类,为从未存在的键提供默认值,从而避免抛出 keyError
from collections import defaultdict
1) 使用 list 作为 defaultdict
dftdict = defaultdict(list)
for i in range(3):
dftdict[i].append(i)
print(dftdict)
输出:
defaultdict(list, {0: [0], 1: [1], 2: [2]})
2) 使用 int 作为 defaultdict
intdict = defaultdict(int)
X = [1,2,3,4,5,1,1,3,4,5]
for i in X:
#The default value is 0 so there is no need to enter the key first
intdict[i] += 1
print(intdict)
输出:
defaultdict(int, {1: 3, 2: 1, 3: 2, 4: 2, 5: 2})
ChainMap 用于将多个字典合并成一个单元,因此返回字典列表
from collections import ChainMap
x1 = {'a': 0, 'b': 1}
x2 = {'c':2,'d':3}
x3 = {'e':4,'f':5}
chainmap = ChainMap(x1,x2,x3)
print(chainmap)
输出:
ChainMap({'a': 0, 'b': 1}, {'c': 2, 'd': 3}, {'e': 4, 'f': 5})
1) 使用键名访问值
print(chainmap['a'])
输出:
0
2) 访问值
print(chainmap.values())
输出:
ValuesView(ChainMap({'a': 0, 'b': 1}, {'c': 2, 'd': 3}, {'e': 4, 'f': 5}))
3) 访问键
print(chainmap.keys())
输出:
KeysView(ChainMap({'a': 0, 'b': 1}, {'c': 2, 'd': 3}, {'e': 4, 'f': 5}))
4) 插入新字典
通过使用 new_child() 方法,新字典被插入到 ChainMap 的开头
chainmap1 = chainmap.new_child({'g':6,'h':7})
print(chainmap1)
输出:
ChainMap({'g': 6, 'h': 7}, {'a': 0, 'b': 1}, {'c': 2, 'd': 3}, {'e': 4, 'f': 5})
NamedTuple 是一个具有每个位置名称的元组对象
from collections import namedtuple
1) 声明 namedtuple
band = namedtuple('Country',['name','capital','famousband'])
2) 向 namedtuple 中插入值
val = band("south korea","Seoul","BTS")
print(val)
输出:
Country(name='south korea', capital='Seoul', famousband='BTS')
3) 使用索引访问值
print(val[0])
输出:
'south korea'
4) 使用名称访问值
print(val.name)
输出:
'south korea'
deque 是一个列表,用于在容器的两侧实现 append 和 pop 操作
from collections import deque
1) 声明 deque
queue = deque([4,5,6])
print(queue)
输出:
deque([4, 5, 6])
2) 使用 append 在 deque 的右侧插入元素,即 deque 的末尾
queue.append(7)
print(queue)
输出:
deque([4, 5, 6, 7])
3) 使用 append 在 deque 的左侧插入元素,即 deque 的开始位置
queue.appendleft(3)
print(queue)
输出:
deque([3, 4, 5, 6, 7])
4) 使用 pop 从 deque 的右侧删除元素,即 deque 的末尾
queue.pop()
print(queue)
输出:
deque([3, 4, 5, 6])
5) 使用 popleft 从 deque 的左侧删除元素,即 deque 的开头
queue.popleft()
print(queue)
输出:
deque([4, 5, 6])
Priya Sengar (Medium, Github) 是一名来自旧金山大学的数据科学家。Priya 热衷于解决数据问题并将其转化为解决方案。
1. 谷歌网络安全证书 - 快速进入网络安全职业领域。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织进行 IT 工作