Python3-collections模块-容器数据类型

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
Counter

    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')])
OrderDict

    collections.defaultdict

      这个类和字典dic基本一致,只是调用了一个工厂函数来给字典中的value提供一个指定类型的默认值

# 必须要导入collections模块
import collections


dd = collections.defaultdict(lambda: "默认值")
print(dd["k1"])    # 输出结果: 默认值
defaultdict

    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
namedtuple

    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])
deque

 

posted on 2017-03-14 15:13  AustralGeek  阅读(342)  评论(0编辑  收藏  举报

导航