菜鸟笔记
提升您的技术认知

Python 字典键映射多个值,字典值为列表,defaultdict

背景

由于很多文件的中的记录都可转化为元组或列表,因此,对于这些记录的归纳统计就需要将所有列表转换为字典。
例如,有如下记录:

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