python库整理:collections.defaultdict
Posted 刘文巾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python库整理:collections.defaultdict相关的知识,希望对你有一定的参考价值。
Python中通过Key访问字典,当Key不存在时,会引发‘KeyError'异常。(之前dict里面的解决方法是使用get函数设置默认值)
dit={'yellow': 3, 'blue': 4, 'red': 1}
dit['green']
#KeyError: 'green'
dit.get('green',10)
#第二个参数为,如果值不存在,返回的默认值
#10
我们也可以使用collections类中的defaultdict()方法来为字典提供默认值。该函数返回一个类似字典的对象。
defaultdict是Python内建字典类(dict)的一个子类,它重写了方法_missing_(key),增加了一个可写的实例变量default_factory。
实例变量default_factory被missing()方法使用,如果该变量存在,则用以初始化构造器,如果没有,则为None。其它的功能和dict一样。
我们先看一个例子:
s=[('yellow',1),
('blue',2),
('yellow',3),
('blue',4),
('red',1)]
我们希望把s中的信息整理成字典,每个颜色的数字放在这个颜色对应的列表中
以下两种方法都是不行的。新的值会覆盖掉老的值
dict(s)
#{'yellow': 3, 'blue': 4, 'red': 1}
d2=dict()
for k,v in s:
d2[k]=v
d2
#{'yellow': 3, 'blue': 4, 'red': 1}
如果我们不用defaultdict的话,可以用下面两种方法来实现
d3=dict()
for k,v in s:
if(k in d3):
d3[k].append(v)
else:
d3[k]=[v]
d3
{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}
d4=dict()
'''
setdefault和get一样,是返回字典的键值,
不过和get不一样的是,在字典中不包含指定的项的时候,
添加指定的键值对(如果不指定键值的话,默认为None)
'''
for k,v in s:
d4.setdefault(k,[]).append(v)
d4
#{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}
使用defaultdict
d=defaultdict(list)
#参数为defaultdict属性的类型
for k,v in s:
d[k].append(v)
'''
当字典中没有的键第一次出现时,default_factory自动为其返回一个空列表
list.append()会将值添加进新列表;
再次遇到相同的键时,list.append()将其它值再添加进该列表。
'''
a=d.items()
print(d)
#defaultdict(<class 'list'>, {'yellow': [1, 3], 'blue': [2, 4], 'red': [1]})
print(a)
#dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
print(dict(a))
#{'yellow': [1, 3], 'blue': [2, 4], 'red': [1]}
如果defaultdict的参数是int的话,那么就和在setdefault里面设置默认参数为0是一样的
s = 'Chinese'
d = defaultdict(int)
for k in s:
d[k] += 1
d
#defaultdict(int, {'C': 1, 'h': 1, 'i': 1, 'n': 1, 'e': 2, 's': 1})
d1 = dict()
for k in s:
d1.setdefault(k,0)+=1
#这样就是错的,SyntaxError: can't assign to function call
以上是关于python库整理:collections.defaultdict的主要内容,如果未能解决你的问题,请参考以下文章
python 库整理:toolz.curried (整理中)