背景
由于很多文件的中的记录都可转化为元组或列表,因此,对于这些记录的归纳统计就需要将所有列表转换为字典。
例如,有如下记录:
l1 = ['张三', '语文', 50]
l2 = ['李四', '语文', 60]
l3 = ['张三', '数学', 70]
l4 = ['李四', '数学', 60]
预期结果为:
{
'张三': [50, 70], '李四': [60, 60]}
代码
in [1]: from collections import defaultdict
in [2]: l1 = ['张三', '语文', 50]
...: l2 = ['李四', '语文', 60]
...: l3 = ['张三', '数学', 70]
...: l4 = ['李四', '数学', 60]
in [3]: result = defaultdict(list)
in [4]: for i in (l1,l2,l3,l4):
...: result[i[0]].append(i[2])
in [5]: result
out[5]: defaultdict(list, {
'张三': [50, 70], '李四': [60, 60]})
in [6]: result['张三']
out[6]: [50, 70]
分析
defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyerror而是一个默认值。
defaultdict接受一个工厂函数作为参数,如下来构造:
dict =defaultdict( factory_function)
这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0。
优点
不用再检测字典键是否存在!
传统方法见 https://www.coonote.com/python-note/python-merges-multiple-lists-into-dictionary.html