一.collections库简介
Python为我们提供了4种基本的数据结构:list, tuple, dict, set,但是在处理数据量较大的情形的时候,这4种数据结构就明显过于单一了,比如list作为数组在某些情形插入的效率会比较低,有时候我们也需要维护一个有序的dict。所以这个时候我们就要用到Python标准库为我们提供的collections包了,它提供了多个有用的集合类,熟练掌握这些集合类,不仅可以让我们让写出的代码更加Pythonic,也可以提高我们程序的运行效率。
二.collections常用类型
1.defaultdict
defaultdict(default_factory)
在普通的dict之上添加了default_factory,使得key不存在时会自动生成相应类型的value,default_factory参数可以指定成list, set, int等各种合法类型。
我们现在有下面这样一组list,虽然我们有5组数据,但是仔细观察后发现其实我们只有3种color,但是每一种color对应多个值。现在我们想要将这个list转换成一个dict,这个dict的key对应一种color,dict的value设置为一个list存放color对应的多个值。我们可以使用defaultdict(list)
来解决这个问题。
from collections import defaultdict
s=[('blue',1),('yellow',2),('blue',3),('yellow',4),('red',5)]
d=defaultdict(list)
for k,v in s:
d[k].append(v)
print(d)
运行结果是
defaultdict(<class 'list'>, {'blue': [1, 3], 'yellow': [2, 4], 'red': [5]})
如果我们不希望含有重复的元素,可以考虑使用defaultdict(set)
。set相比list的不同之处在于set中不允许存在相同的元素。
from collections import defaultdict
s=[('blue',1),('yellow',2),('blue',1),('yellow',4),('red',5)]
d=defaultdict(set)
for k,v in s:
d[k].add(v)
print(d)
运行结果是
defaultdict(<class 'set'>, {'blue': {1}, 'yellow': {2, 4}, 'red': {5}})