python中的defaultdict类型

Python内置的字典类型挺好用, 但有一个很麻烦的缺点, 当查询的键不存在时,就会报KeyError的错误, 影响程序的正常使用, 虽然可以用异常捕获处理, 但有时候还是不太方便. 

collections模块中的defaultdict 类型 就为我们提供了一个解决方案, 使用defaultdict 类型时, 当查询的键不存在,就会用一个默认的值代替. 

下面就来看一下常见类型的默认值

 

from collections import defaultdict
def defaultdict_test():


    dict1 = defaultdict(int)
    dict2 = defaultdict(float)
    dict3 = defaultdict(complex)
    dict4 = defaultdict(str)

    dict5 = defaultdict(tuple)
    dict6 = defaultdict(list)
    dict7 = defaultdict(set)
    dict8 = defaultdict(dict)

    print(type(dict1))

    print(dict1[2])
    print(dict2[2])
    print(dict3[2])
    print(dict4[2])
    print(dict5[2])
    print(dict6[2])
    print(dict7[2])
    print(dict8[2])

if __name__ == '__main__':
    defaultdict_test()

 

 

得到的结果如下

<class 'collections.defaultdict'>
0
0.0
0j

()
[]
set()
{}

由此可得 defaultdict 的默认值

 

 

字典类型自带一个方法, 可以在调用字典时处理这个问题

dict.setdefault()方法

设置默认值:有两个参数,一个是键的名称,另一个是默认值。如果键已经存在字典中就返回它的值,如果没有就将默认值保存并且返回该默认值。

strings = ('puppy', 'kitten', 'puppy', 'puppy',
           'weasel', 'puppy', 'kitten', 'puppy')
counts = {}
 
for kw in strings:
    counts.setdefault(kw, 0)
    counts[kw] += 1

 

posted @ 2022-09-08 09:03  studieren  阅读(154)  评论(0)    收藏  举报