collections 中 defaultdict 的使用
1.1 字典的键映射多个值
将下面的列表转成字典
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]```
一个字典就是一个键对应一个单值的映射,而上面的列表中有相同键。如果你想要一个键映射多个值,那么就需要将这多个值放到另外的序列中,比如 list 或者 set 里面,像下面这样:
d = {
'a': [1, 2, 3],
'b': [4, 5]
}
e = {
'a': {1, 2, 3},
'b': {4, 5}
}
你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值。
In [1]: l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]
In [2]: from collections import defaultdict
In [3]: d = defaultdict(list)
In [4]: for key, value in l:
...: d[key].append(value)
...:
In [5]: d
Out[5]: defaultdict(list, {'a': [2, 1, 3, 1], 'b': [3, 4, 3]})
当然这个默认的容器不一定是 list, 也可以是集合 set。根据自己的需求选择用 list 还是 set 。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合!