collections是Python内建的一个集合模块,提供了许多有用的集合类.
1 defaultdict
当defaultdict里面套defaultdict时,实际上实现了一个二维坐标的功能.
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