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://blog.csdn.net/mighty13/article/details/107144878

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值