1. namedtuple(命名元组)
这里个人觉得有点像c语言里面的结构体。
创建和使用:
import collections
# 利用namedtuple产生一个类,两个参数 命名的名字,所含成员名字
Point = collections.namedtuple("Point", ['x', 'y'])
# 用产生的类去实例化一个对象
p = Point(1, 2)
print(p.x)
2. deque(双向队列)
这种队列拜托了队列先进先出的一端原则。
创建和使用:
# 用列表来创建一个deque对象
q = collections.deque([0, 1, 2, 3, 4])
print(q)
# 追加的两种方式
q.appendleft("x")
q.append("y")
print(q)
3. defaultdict(默认值字典)
众所周知,一旦我们访问字典中的某个key不存在字典中,那么程序就好崩溃,但是很多时候,我们不愿意为一个字典访问加上try语句,这显得很麻烦,我们希望没有给定值但是访问到的key可以正常有值,默认值字典应运而生。
创建和使用:
# d1是普通字典
d1 = {}
# 给定默认值的函数是一个lambda表达式
fuc1 = lambda: "zc"
d2 = collections.defaultdict(fuc1)
d2["one"] = 1
print(d2["one"])
print(d2["hsjdbj"])
但是我们将最后一句的d2换成d1,程序崩溃了。
4. Counter(计数器)
通过传入可迭代对象创建,计数单元就是这个可迭代对象的最小单元。他会生成字典,key是计数单元,value是计数得到的数值。
创建和使用:
# 通过字符串创建
str1 = "cgukalbcklancl;wea'wec,w"
c = collections.Counter(str1)
print(c)
str1 = ["zc", "nb"]
c = collections.Counter(str1)
print(c)
5. OrderDict(有序字典)
这里指的是元素添加顺序拜托了原本字典无序的规定,只有顺序一致的字典才是相同的。
创建和使用:
# 创建一个字典对象
print("dict:")
d1 = {}
d1["a"] = "A"
d1["b"] = "B"
d1["c"] = "C"
for k, v in d1.items():
print(k, "---", v)
# 创建一个有序字典对象
print("OrderDict:")
d2 = collections.OrderedDict()
d2["a"] = "A"
d2["b"] = "B"
d2["c"] = "C"
for k, v in d2.items():
print(k, "---", v)
# 这里创建两个内容hed1和d2分别一样的dict,但是改变了元素添加的书序
d3 = {}
d3["a"] = "A"
d3["c"] = "C"
d3["b"] = "B"
d4 = collections.OrderedDict()
d4["a"] = "A"
d4["c"] = "C"
d4["b"] = "B"
print(d1 == d3)
print(d2 == d4)
从结果看只要内容相同,不论处理顺序,两个字典是相同的;但是,OrderDict来说则完全不同,它记住了元素添加顺序。(不是修改顺序)