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 csv库整理(部分)

python 部分标准库笔记整理

超全!我把 Python 的 200个标准库整理出来了

python 库整理:toolz.curried (整理中)

Python库数据处理机器学习大数据文件处理等14个类的所有python库整理

python 三方面库整理