一、案例
有以下DataFrame:
现要将构建一个dict字典,key值保存caseid,value值保存index(行号),通过观察数据我们发现,caseid不是唯一值,同一个caseid有可能存在多行。
def MakePregMap(df):
d = defaultdict(list)
for index, caseid in df.caseid.iteritems():
d[caseid].append(index)
return d
pregmap=nsfg.MakePregMap(df)
pregmap
运行结果如下:
二、defaultdict用法详解
当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element] =value即,调用的时候也是如此,dict[element] = xxx,但前提是element字典里,如果不在字典里就会报错,如:
dict1={}
dict1['name']='张三'
dict1
输出:
{'name': '张三'}
接下来:
dict1['age']
输出:
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-28-e25093ffead1> in <module>
----> 1 dict1['age']
KeyError: 'age'
这时defaultdict就能排上用场了,defaultdict的作用是在于,当字典里的key不存在但被查找时,返回的不是keyError而是一个默认值,这个默认值是什么呢,见下面
defaultdict函数详解
defaultdict接受一个工厂函数作为参数,如下来构造:
dict =defaultdict( factory_function)
这个factory_function可以是list、set、str等等,作用是当key不存在时,返回的是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0,如下举例:
from collections import defaultdict
dict1 = defaultdict(int)
dict2 = defaultdict(set)
dict3 = defaultdict(str)
dict4 = defaultdict(list)
dict1[2] ='two'
print(dict1[1])
print(dict2[1])
print(dict3[1])
print(dict4[1])
输出:
0
set()
[]