Python collections模块详解之——defaultdict

本文深入解析Python collections模块中的defaultdict,一种特殊的字典类型,能够通过工厂函数为未初始化的键提供默认值,极大简化了字典操作流程。文章通过实例展示了defaultdict在不同场景下的应用,如使用list和int作为工厂函数,以及自定义工厂函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python collections模块详解之——defaultdict

基本信息

collections-Container datatype

collections模块实现了一些特殊的容器类型,用作Python内置的通用容器dict,list,set和tuple的补充.本次介绍其中的defaultdict模块.它是dict的子类,使用一个工厂函数来为字典提供默认值.

其定义方式如下:

class collections.defaultdict([default_factory[, ...]])

它返回一个字典对象.
第一个输入参数是default_factory,默认值为None.也可以是一个返回某个具体值的函数,包括lambda表达式.

使用简介

使用list作为工厂函数

from collections import defaultdict

s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
for k, v in s:
    d[k].append(v)
d.items()
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])

如果我们不使用defaultdict而使用普通的dict,则不能直接写d[k].append(v).因为如果k没有包含在字典d中是会报错的.我们必须像下面这样写:

d = {}
for k, v in s:
    d.setdefault(k, []).append(v)
d.items()
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])

显然使用defaultdict更加简洁方便

使用int作为工厂函数

s = 'mississippi'
d = defaultdict(int)
for k in s:
    d[k] += 1
    
d.items()
dict_items([('m', 1), ('i', 4), ('s', 4), ('p', 2)])

如果我们要使用普通的dict实现这个代码,必须得调用setdefault函数.显然没有这么简洁,方便.

自定义工厂函数

官方文档中提示更加高效灵活的设置工厂函数的方式是使用lambda表达式提供任何形式的常值.工厂函数可以这样定义:

def my_df(value):
    return lambda: value

使用方式如下:

d = defaultdict(my_df(-1))
d.update(a=1, b=2)
print(d.items())
print(d['c'])
dict_items([('a', 1), ('b', 2)])
-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值