Python 在内置的数据类型的基础上, 在collections模块中提供了几个额外的数据类型. 分别是
- defaultdict
- namedtuple
- deque
- Counter
- UserDict
- UserList
- UserString
- OrderedDict
- ChainMap
defaultdict
重点关注这一句:
The first argument provides the initial value for the default_factory attribute; it defaults to None. All remaining arguments are treated the same as if they were passed to the dict constructor, including keyword arguments.
defaultdict 的第一个参数为默认的工厂方法. 使用示例:
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
d[k].append(v)
输出
defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
另一个常见的用法是, 当对一个键进行嵌套赋值时, 会触发keyError异常。 defaultdict可以解决这个问题
Question
s = {}
s['a']['b'] = 2
输出
KeyError: ‘a’
Solution
d = lambda: collections.defaultdict(d)
s = d()
s['a']['b'] = 'c'
print(s)
输出
defaultdict(<function <lambda> at 0x0000000002072E18>, {'a': defaultdict(<function <lambda> at 0x0000000002072E18>, {'b': 'c'})})
namedtuple
把元组变成一个针对简单任务的容器。你不必使用整数索引来访问一个namedtuples的数据。你可以像字典(dict)一样访问namedtuples,但namedtuples是不可变的。
“`Python
def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
deque
双端队列.
Counter
计数器, 可以针对某项数据进行计数.
OrderedDict
Python中的字典本身是无序的, 当需要保持字典有序的时候, 可以使用OrderedDict