【Python】defaultdict 使用技巧

这次让我们关注 collections 模块中的一个非常有用的小技巧,使用 defaultdict 来处理字典中的缺失键。

defaultdict 使用技巧

在使用普通的字典对象时,如果尝试访问字典中不存在的键,Python 会引发一个 KeyError 异常。而在很多场景下,我们希望当访问一个不存在的键时,字典能自动为我们创建这个键并分配一个默认值,这正是 defaultdict 能做到的。

collections.defaultdict 类接收一个工厂函数作为参数,当访问不存在的键时,它会自动调用这个工厂函数创建该键并分配给它一个默认值。

示例 1:计数

假设我们需要计数列表中各元素的出现次数。

from collections import defaultdict

fruits = ['apple', 'banana', 'orange', 'apple', 'banana', 'apple']
fruit_counter = defaultdict(int)  # int() 函数返回 0

for fruit in fruits:
    fruit_counter[fruit] += 1

print(fruit_counter)

在这里,我们创建了一个 defaultdict 并将 int 作为默认工厂函数,所以任何新键的初始值都将是 0。

示例 2:组织数据到列表中

假设我们想将数据按照某个条件分类,然后储存在列表中。

from collections import defaultdict

surnames = [
    ('Smith', 'John'),
    ('Doe', 'Jane'),
    ('Smith', 'Will'),
    ('Black', 'Eva'),
]

surname_dict = defaultdict(list)  # list() 函数返回空列表 []

for surname, name in surnames:
    surname_dict[surname].append(name)

print(surname_dict)

这里,我们将 list 作为 defaultdict 的默认工厂函数,因此任何新键都将自动被初始化为空列表,方便我们追加元素。

总结

通过使用 defaultdict 来避免手动检查字典中键的存在,我们可以编写出更加简洁和高效的代码。它特别适用于需要聚合或分类数据的情况,比如计数、分组等。这是一个简单而强大的工具,可以帮助你减少代码中的 if 检查和手动初始化值的操作。collections 模块中还有许多其他有趣的类,比如 CounterOrderedDictnamedtuple,这些都是扩展和加强 Python 标准字典和元组功能的有用工具。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值