在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。
1.namedtuple: 生成可以使用名字来访问元素内容的tuple
2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
3.Counter: 计数器,主要用来计数
4.OrderedDict: 有序字典
5.defaultdict: 带有默认值的字典
1.namedtuple
from collections import namedtuple
Point = namedtuple("Point", ["x", "y"])
d = Point(1, 2)
print(d.x) # 1
print(d.y) # 2
Circle = namedtuple("Ciecle", ["a", "b", "r"])
c = Circle(1, 2, 3)
print(c.a) # 1
print(c.b) # 2
print(c.r) # 3
deque
使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque
l = [1, 2, 3]
det = deque(l)
print(det) # deque([1, 2, 3])
det.append(4)
det.append(5)
det.appendleft(6)
det.appendleft(7)
print(det) # deque([7, 6, 1, 2, 3, 4, 5])
det.pop()
det.pop()
det.popleft()
det.popleft()
det.popleft()
print(det) # deque([2, 3])
det.popleft()
det.popleft()
print(det) # deque([])
det.popleft()
print(det) # 报错
OrderedDict
有序字典:保证每一次输出都是按定义的顺序输出,不想普通字典一样随机输出
from collections import OrderedDict
d = {'z': 'qww', 'x': 'asd', 'y': 'asd', 'name': 'alex'}
print(d.keys())
o_d = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(o_d)
od = OrderedDict()
od['z'] = 10
od['x'] = 10
od['y'] = 30
print(od)
print(od.keys())
"""
dict_keys(['z', 'x', 'y', 'name'])
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict([('z', 10), ('x', 10), ('y', 30)])
odict_keys(['z', 'x', 'y'])
"""
defaultdict
带有默认值的字典
from collections import defaultdict
def func():
return 'N/A'
my_dic = defaultdict(func)
print(my_dic['k'])
dic = defaultdict(lambda: "good")
print(dic["k"])
"""
N/A
good
"""
Counter
计数
from collections import Counter
c = Counter("FGEESGFGsyfFEYRDGDFS")
print(c)
print(c["F"])
"""
Counter({'F': 4, 'G': 4, 'E': 3, 'S': 2, 'D': 2, 's': 1, 'y': 1, 'f': 1, 'Y': 1, 'R': 1})
4
"""
c = Counter('which')
print(c)
# Counter({'h': 2, 'w': 1, 'i': 1, 'c': 1})
c.update('witch')
print(c)
# Counter({'h': 3, 'w': 2, 'i': 2, 'c': 2, 't': 1})
c.update('watch')
print(c)
# Counter({'h': 4, 'w': 3, 'c': 3, 'i': 2, 't': 2, 'a': 1})
c.subtract('where')
print(c)
# Counter({'h': 3, 'c': 3, 'w': 2, 'i': 2, 't': 2, 'a': 1, 'r': -1, 'e': -2})
del c["h"]
print(c)
print(list(c.elements()))
print(c.most_common()) # 返回一个有序字典
"""
Counter({'c': 3, 'w': 2, 'i': 2, 't': 2, 'a': 1, 'r': -1, 'e': -2})
['w', 'w', 'i', 'i', 'c', 'c', 'c', 't', 't', 'a']
[('c', 3), ('w', 2), ('i', 2), ('t', 2), ('a', 1), ('r', -1), ('e', -2)]
"""
c2 = c.copy()
print(c2)
# Counter({'c': 3, 'w': 2, 'i': 2, 't': 2, 'a': 1, 'r': -1, 'e': -2})
c.clear()
print(c)
# Counter()