Defaultdict 默认字典

  • collections 模块中的 defaultdict(默认字典),可以用来构造“一个键映射多个值”这样的字典
  • 如果你想保持元素的插入顺序就应该使用list, 如果想去掉重复元素就使用set
import collections import defaultdict

d=defaultdict(list) / e=defaultdict(set)
d = {
'a' : [1, 2, 3],
'b' : [4, 5]
}
e = {
'a' : {1, 2, 3},
'b' : {4, 5}
}
  • 要注意,defaultdict会自动为将要访问的键(就算目前字典中并不存在这样的键)创建映射实体
from collections import defaultdict

d=defaultdict(list)
d[1].append('a')
d[1].append('b')
d[2].append('a')
print(d[0])
[] //即使我们没有为d[0]赋值,但依旧为这个位置占了个坑
print(d)
defaultdict(<class 'list'>, {0: [], 1: ['a', 'b'], 2: ['a']}) q=defaultdict(set)
q[0].add('a0')
q[0].add('b0')
q[0].add('c0')
q[1].add('d1')
print(q)
defaultdict(<class 'set'>, {0: {'b0', 'c0', 'a0'}, 1: {'d1'}})
  • 如果我们想根据某一个字段将数据分组到一个大的数据结构中,并且允许随机访问,可以考虑使用defaultdict( )来构建一个多值字典
rows = [
{'address': '5412 N CLARK', 'date': '07/01/2012'},
{'address': '5148 N CLARK', 'date': '07/04/2012'},
{'address': '5800 E 58TH', 'date': '07/02/2012'},
{'address': '2122 N CLARK', 'date': '07/03/2012'},
{'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
{'address': '1060 W ADDISON', 'date': '07/02/2012'},
{'address': '4801 N BROADWAY', 'date': '07/01/2012'},
{'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
] from collections import defaultdict
rows_by_date=defaultdict(list)
for row in rows:
rows_by_date[row['date']].append(row)
print(rows_by_date) defaultdict(<class 'list'>,
{'07/04/2012': [{'date': '07/04/2012', 'address': '5148 N CLARK'}, {'date': '07/04/2012', 'address': '1039 W GRANVILLE'}],
'07/02/2012': [{'date': '07/02/2012', 'address': '5800 E 58TH'}, {'date': '07/02/2012', 'address': '5645 N RAVENSWOOD'}, {'date': '07/02/2012', 'address': '1060 W ADDISON'}],
'07/03/2012': [{'date': '07/03/2012', 'address': '2122 N CLARK'}],
'07/01/2012': [{'date': '07/01/2012', 'address': '5412 N CLARK'}, {'date': '07/01/2012', 'address': '4801 N BROADWAY'}]})

setdefault

p={}
p.setdefault('',[]).append('a')
p.setdefault('',[]).append('b')
p.setdefault('',[]).append('c')
print(p[0])
KeyError: 0 #和上面相反,这个并不会占坑
print(p) {'': ['c'], '': ['a', 'b']}

创建一个多值映射字典

d = {}
for key, value in pairs:
if key not in d:
d[key] = []
d[key].append(value) d = defaultdict(list)
for key, value in pairs:
d[key].append(value)

最新文章

  1. json改造优化无刷新分页
  2. 第3章 System V IPC
  3. 《PHP扩展开发及内核应用》
  4. CAS Proxy 的相关文章
  5. 百度bae定时任务使用方法
  6. Android list刷新后仍然定位到原来的位置,解决。
  7. wpa_supplicant 与iwpriv工具配置WIFI的命令
  8. hdu 5396 Expression(区间dp)
  9. 使用 hibernate 存取大对象数据类型(clob和blob)
  10. freemarker 里 ?? 和 ? 都是什么意思
  11. schemaeasyui实例:SSh结合Easyui实现Datagrid的分页显示
  12. javascript基础-对象
  13. [C++]Linux之C编程异常[true未定义解决方案]
  14. 使用flask写移动端API
  15. c#程序设计原则
  16. POJ2139--Six Degrees of Cowvin Bacon(最简单Floyd)
  17. 如何借助 NoSQL 提高 JPA 应用性能
  18. iOS界面篇 - bounds和frame的相同和区别
  19. cocos2dx 安卓真机调试问题汇总
  20. 怎样在ado.net中存取excel和word呢?

热门文章

  1. AI_图像识别
  2. 【原创】vim插件安装简介
  3. Apache 中httpd.conf文件配置详解(转载)
  4. 树状数组套trie 模板
  5. DAY31、socket套接字
  6. codis__使用注意事项
  7. Postman使用手册4——API test
  8. 阿里java开发规范学习(附P3C IDEA插件 帮助规范的养成)
  9. consul部署多台Docker集群
  10. 大数据平台-修改主机名及ssh免密码登录