Python3中的collections模块实现了一些专业的容器数据类型
最常用的容器数据类型 字典、列表和元组、集合都已经被Python默认导入,但在实现一些特定的业务时,collections模块中的容器数据类型则显得更为专业,如:
collections.Counter
计数器类型,dict的子类,一般用于统计一个序列类型中可哈希的元素的个数
# 必须要导入collections模块 import collections ct = collections.Counter("Hello,World!") print(ct) # 输出结果: Counter({'l': 3, 'o': 2, 'H': 1, 'e': 1, ',': 1, 'W': 1, 'r': 1, 'd': 1, '!': 1}) print(ct["l"]) # 输出结果: 3
collections.OrderDict
有序字典与常规字典相似,dict的子类,它会记住键值对插入的顺序
# 必须要导入collections模块 import collections # 和字典差不多,只不过是有顺序的 od = collections.OrderedDict() od["k1"] = "v1" od["k2"] = "v2" od["k3"] = "v3" # 把某个键值对移动到最后 od.move_to_end("k1") print(od) # 输出结果: OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k1', 'v1')])
collections.defaultdict
这个类和字典dic基本一致,只是调用了一个工厂函数来给字典中的value提供一个指定类型的默认值
# 必须要导入collections模块 import collections dd = collections.defaultdict(lambda: "默认值") print(dd["k1"]) # 输出结果: 默认值
collections.namedtuple
这是调用了一个工厂方法,相当于比较快捷的创建了一个元组类,而访问这个元组中的元素不是通过下标,而是通过属性名
# 必须要导入collections模块 import collections Coordinate = collections.namedtuple("Coordinate", ["x", "y"]) newyork = Coordinate(-77.02, 39.91) # 可以使用上面定义的字段名称来轻松访问元组中的值,多用于坐标之类的东西 print(newyork.x) # 输出结果: -77.02 print(newyork.y) # 输出结果: 39.91
collections.deque
双向队列
# 必须要导入collections模块 import collections # 双向队列和list差不多 dq = collections.deque([1, 2, 3, 4, 5, ]) # 向队列的右边加一个元素 dq.append(6) # 向队列的左边加一个元素 dq.appendleft(0) # 删除并获取最后一个元素 print(dq.pop()) # 输出结果: 6 # 删除并获取第一个元素 print(dq.popleft()) # 输出结果: 0 print(dq) # 输出结果: deque([1, 2, 3, 4, 5])