这里的defaultdict(function_factory)构建的是一个类似dictionary的对象,其中keys的值,自行确定赋值,但是values的类型,是function_factory的类实例,而且具有默认值。

使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。

  1 import collections
2 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
3
4 d = collections.defaultdict(list)
5 for k, v in s:
6 d[k].append(v)#这里的结构是k:[] 所以这里可以append
7
8
9 print(d.items())
10
11 print(d["aaa"]) #获取不存在的key并不会报错

输出:

dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
[]

dict_items 统计”yellow” 的所有v的值, d[“aaa”] 没有此key返回空列表

字典也有类似功能:

  1 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
2 d={}
3 for k, v in s:
4 d.setdefault(k,[]).append(v)
5
6 print(d.items())

这个方法便捷性差一些 dict.setdefault()

defaultdict计数,将default_factory设为int即可

  1 from collections import defaultdict
2 s = 'mississippiasdjklajskdlzxzxcmasdasdzxc'
3 d = defaultdict(int)
4
5 for k in s:
6 d[k] += 1
7
8 print(d.items())

结果:

dict_items([('m', 2), ('i', 4), ('s', 8), ('p', 2), ('a', 4), ('d', 4), ('j', 2), ('k', 2), ('l', 2), ('z', 3), ('x', 3), ('c', 2)])

字符串中的字母第一次出现时,字典中没有该字母,default_factory函数调用int()为其提供一个默认值0,加法操作将计算出每个字母出现的次数。

使用函数返回

此函数不能带参数

  1 from collections import defaultdict
2 def constant_factory(value):
3 return lambda: 0
4 d = defaultdict(constant_factory(s))
5
6 print(d["aaa"])

结果

0

使用lambda来完成统计

  1 from collections import defaultdict
2 s = 'mississippiasdjklajskdlzxzxcmasdasdzxc'
4 counter = defaultdict(lambda: 0)
5 for kw in s:
6 counter[kw] += 1

最新文章

  1. Jquery 小技巧
  2. SQL 存储过程 传入数组参数
  3. Voreen (一) GPU Raycast主流程
  4. java知识点、重点知识点
  5. primefaces 知识点整理
  6. mysql由浅入深探究(一)----数据库简介与mysql安装
  7. 让popUpWindow之外的区域显示阴影效果
  8. easyui datagrid 表格组件列属性formatter和styler使用方法
  9. 分析和解析PHP代码的7大工具
  10. .rdp 文件参数详解
  11. 首页重定位到mian.action上
  12. 用CSS做圆角矩形
  13. http 双向通信之port映射
  14. 利用自动类型转换存储string类型
  15. Python基础:搭建开发环境(1)
  16. 语法之进化论之lambda表达式
  17. flume安装
  18. namecheap 添加二级域名
  19. 通过git命令行从github或服务器上克隆、修改和更新项目
  20. 深入理解java虚拟机---java虚拟机内存管理(五)

热门文章

  1. 搭建Nuxt项目(搭配Element UI、axios)
  2. [原][OE][官方例子]osgearth_annotation OE地球添加热点标签
  3. Flutter Offstage、Visibility隐藏/可见
  4. pytorch求范数函数——torch.norm
  5. 深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)
  6. Linux记录-shell 100例(转载)
  7. Laya的动画制作,整图动画,序列图动画,时间轴动画,龙骨动画
  8. 【430】BST and Splay Tree
  9. **209. Minimum Size Subarray Sum 长度最小的子数组
  10. HDU3853 LOOPS 期望DP基础题