Python collections.defaultdict()笔记

与dict的差别

其实defaultdict解释是数据类型容器模块,本质就是一个字典(dict),只不过python自动的为它的键赋了一个初始值。
为什么要定义一个这样容器呢?
因为Python中dict是通过Key访问字典,当Key不存在时,会引发‘KeyError’异常。为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值。

比如你想计算频率:

wordlist = ['a','b','b','c','e','e','e']
frequencies = {}
for word in wordlist:
    frequencies[word] += 1

python会抛出一个KeyError 异常,因为字典索引之前必须初始化,可以用下面的方法解决:

wordlist = ['a','b','b','c','e','e','e']
frequencies = {}
for word in wordlist:
    try:
        frequencies[word] += 1
    except Exception:
        frequencies[word] = 1
print('word:',frequencies)
wordlist = ['a','b','b','c','e','e','e']
for word in wordlist:
    if word in frequencies:
        frequencies[word] += 1
    else:
        frequencies[word] = 1

collections.defaultdict使用

而collections.defaultdict也可以轻松的解决这个问题:

from collections import defaultdict
wordlist = ['a','b','b','c','e','e','e']
frequencies = defaultdict(int)
for word in wordlist:
    frequencies[word] += 1

collections.defaultdict可以接受一个函数作为参数来初始化。我们想要frequencies[word]初始化为0,这时就可以用一个int()的内建函数作为参数出给defaultdict,我们不带参数调用int(),int()就会返回一个0值. 同时也可以用python其他类型的内建函数list()等作为参数.
比如:

import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
# defaultdict
d = collections.defaultdict(list)
for k, v in s:
    d[k].append(v)
# Use dict and setdefault   
g = {}
for k, v in s:
    g.setdefault(k, []).append(v)

这里setdefault()也可以实现dict初始化默认类型的作用:
如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于字典中,将读出该键原来对应的值,default的值不会覆盖原来已经存在的键的值。

dict.setdefault(key, default=None)

关于setdefault()更多用法可以看博客

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值