collections模块

collections是Python内建的一个集合模块,提供了许多有用的集合类.

1 defaultdict

当defaultdict里面套defaultdict时,实际上实现了一个二维坐标的功能.

collections模块
import collections
# 普通的dict当引用的key不存在的时候会报错,而defaultdict不会,它可以给字典的值设置一个类型,
# 当key不存在时可以自动生成相应类型的value。
# 如下可以直接设置为list str int dict等,这些内置类型在没有参数调用时返回空类型。
d = collections.defaultdict(list)
print(d)
print(d[2])  # 新建一个key后,值是一个默认的空list
d[1] = 5
print(d)
# defaultdict(<class 'list'>, {})
# []
# defaultdict(<class 'list'>, {2: [], 1: 5})

# defaultdict接受的参数必须是可调用的。若直接传递数字0,就会出现TyptError的异常。
# 如下设置默认值为0,不用lambda会报错,这里用lambda相当于一个没有传入值,只有返回值的函数,
a = collections.defaultdict(lambda :0)
print(a[1])
print(a)
# 0
# defaultdict(<function <lambda> at 0x7fac3db7bea0>, {1: 0})

# defaultdict类除了接受类型名称作为初始化函数的参数之外,还可以使用任何不带参数的可调用函数,
# 到时该函数的返回结果作为默认值,这样使得默认值的取值更加灵活。
def fun():
    return [1,2,3]
b = collections.defaultdict(fun)
# 如下已经新建了一个key
b[3]
print(b[1])
print(b)
# [1, 2, 3]
# defaultdict(<function fun at 0x7fac3c0b2730>, {3: [1, 2, 3], 1: [1, 2, 3]})

# 这里规定了字典的默认值是一个字典,相当与字典套字典
c = collections.defaultdict(lambda :collections.defaultdict(list))
# 如果赋明确的数据类型,就按赋的弄,如果不赋就是一个空的list[]
c[0][1] = 555
c[1][1].append([1,2,3])
print(c)
# defaultdict(<function <lambda> at 0x7fab419087b8>, {0: defaultdict(<class 'list'>, {1: 555}),1: defaultdict(<class 'list'>, {1: [[1, 2, 3]]})})
View Code

 

 

上一篇:Python字典嵌套字典


下一篇:Collections 初识