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)

[PY3]——创建多值映射字典?/defaultdict默认字典/setdefault()的更多相关文章

  1. python基础知识4——collection类——计数器,有序字典,默认字典,可命名元组,双向队列

    1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能  Counter 我们从中挑选一些相对常用的方法来举例: 在上面的例子 ...

  2. 八、collection系列-----计数器、有序字典、默认字典、可命名元组、双向队列、单向队列一.计数器(对字典的扩展)

    一.计数器(对字典的扩展) 有如下一个字典: dic = {'k1':123,'k2':123,'k3':12} 统计12出现的次数,123出现的次数   1.统计出现次数 >>> ...

  3. python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数

    上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...

  4. collections系列之OrderedDict【有序字典】与DefaultDict【默认字典】

    今天来向大家介绍一下collections系列中的OrderedDict和DefaultDict,这两种类均是通过collections来创建的,均是对dict字典加工,所有都继承了dict字典的方法 ...

  5. Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...

  6. 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...

  7. Python collections系列之默认字典

    默认字典(defaultdict)  defaultdict是对字典的类型的补充,它默认给字典的值设置了一个类型. 1.创建默认字典 import collections dic = collecti ...

  8. Python_ collections_defaultdict默认字典

    defaultdict(): 默认类型为字典,继承了字典的方法 import collections dic = collections.defaultdict() dic['k1'] = 'hell ...

  9. Python小白学习之路(七)—【字典】【字典的功能】【布尔值】

    字典(dict) 基本结构: d = {key1 : value1, key2 : value2 } dict = {'} key : value称为字典的键值对. 每个键 key和值value 之间 ...

随机推荐

  1. Luckily general gradient for spherical harmonics is defined

    http://web4.cs.ucl.ac.uk/staff/j.kautz/publications/gradientSH_RS04.pdf

  2. 小程序:如何在wxml页面中调用JavaScript函数

    早上过来遇到一个这样的bug: 在计算百分比的时候没有保留小数点后2位,从而导致一些无法整除的结果显示太长 一开始,我以为这是一个很普通的bug,既然wxml在页面{{}}内支持简单的运算,我想也应该 ...

  3. 安装npm及cnpm

    一.安装npm 1. 使用npm首先需要下载node.js 进入nodejs官网nodejs下载,如下图 : 选择适合自己的系统,我这里使用的是window10 64bit 2. 开始安装 **选好需 ...

  4. fread和fwrite用法小结

    fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出. #include <stdio.h>size_t fread(void *p ...

  5. 外网域名映射内网Ip 内网使用外网域名的https证书

    用nslookup www.baidu.com nslookup www.qq.com 15.64.64.53 测试了内网的dns可以解析外网域名 那么我买个外网域名,再对这个外网域名买个证书,然后外 ...

  6. 正则表达式,sed简单用法

      一. 正则表达式 1. 常见的正则表达式字符 [] 匹配字符集 grep "bl[lo]g" oldboy.txt 表示字符‘l’或者‘o’都可匹配 * 重复前面字符任意次 g ...

  7. Python的__getattribute__二三事

    本来以为自己对__getattribute__已经比较了解了,结果用到的时候,才发现有一些知识点之前一直没有真正弄明白,记录如下(针对python3,python2差异较大): object类有__g ...

  8. 手动博客重定向 https://www.cnblogs.com/kelthuzadx/

    https://www.cnblogs.com/kelthuzadx/ 博客狂魔又㕛叒换地址了

  9. 玩转MongoDB

    一.主从复制 1)首先主从服务器在启动的时候,分别要设置master.slave选项,对于slave可以启动中设置源,也可以在启动后设置源. 如:主:mongod --dbpath=/data/mon ...

  10. jquery 实现省市二级联动

    效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...