容器(collcetions)
Python附带⼀个模块, 它包含许多容器数据类型, 名字叫作collections。
1、defaultdict
与dict类型不同, 你不需要检查key是否存在, 所以我们能这样做:
from collections import defaultdict
colours = (
('Yasoob', 'Yellow'),
('Ali', 'Blue'),
('Arham', 'Green'),
('Ali', 'Black'),
('Yasoob', 'Red'),
('Ahmed', 'Silver'),
)
favourite_colours = defaultdict(list)
for name, colour in colours:
favourite_colours[name].append(colour)
print(favourite_colours)
另⼀种重要的是例⼦就是: 当你在⼀个字典中对⼀个键进⾏嵌套赋值时, 如果这个键不存在, 会触发keyError异常。 defaultdict允许我们⽤⼀个聪明的⽅式绕过这个问题。
问题:
some_dict = {}
some_dict['colours']['favourite'] = "yellow"
## 异常输出: KeyError: 'colours'
解决⽅案:
from collections import defaultdict
tree = lambda: defaultdict(tree)
some_dict = tree()
some_dict['colours']['favourite'] = "yellow"
2、Counter
Counter是⼀个计数器, 它可以帮助我们针对某项数据进⾏计数。 ⽐如它可以⽤来计算每个⼈喜欢多少种颜⾊:
from collections import Counter
colours = (
('Yasoob', 'Yellow'),
('Ali', 'Blue'),
('Arham', 'Green'),
('Ali', 'Black'),
('Yasoob', 'Red'),
('Ahmed', 'Silver'),
)
favs = Counter(name for name, colour in colours)
print(favs)
3、deque
deque提供了⼀个双端队列, 你可以从头/尾两端添加或删除元素。
它的⽤法就像python的list, 并且提供了类似的⽅法, 例如:
from collections import deque
d = deque(range(5))
print(len(d),d[0],d[-1])
d.append(6) #插入
d.pop() #删除
d.popleft() #从左侧删除
d.extend([6,7,8]) #拓展队列
d.extendleft([0]) #从左侧拓展
我们也可以限制这个列表的⼤⼩, 当超出你设定的限制时, 数据会从对队列另⼀端被挤出去(pop)。
最好的解释是给出⼀个例⼦:
d = deque(maxlen=30)
现在当你插⼊30条数据时,再次插入,最左边⼀端的数据将从队列中删除。