collections是Python内建的一个集合模块,提供了许多有用的集合类。
OrderedDict是dict的子类,使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用OrderedDict:
>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])
OrderedDict的Key会按照插入的顺序排列,不是Key本身排序。
它可以利用在pytorch模型搭建上:保证模型搭建的有序。
self.branch = nn.Sequential(OrderedDict([
('conv1', nn.Conv1d(cin, cos[1], 1)),
('norm1', nn.BatchNorm1d(cos[1])),
('relu1', nn.ReLU(inplace=True)),
('conv3', nn.Conv1d(cos[1], cos[1], 3, stride=1, padding=1)),
]))
Counter是一个简单的计数器,例如,统计字符出现的个数:Counter它实际也是dict的子类。
>>> from collections import Counter
>>> c = Counter()
>>> for ch in 'programming':
... c[ch] = c[ch] + 1
...
>>> c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})