Python的defaultdict详解

Python的defaultdict详解

  • [什么是 defaultdict](#什么是 defaultdict)
    • [导入与创建 defaultdict](#导入与创建 defaultdict)
  • [defaultdict 的常见用法](#defaultdict 的常见用法)

什么是 defaultdict

defaultdict 是 Python 中 collections 模块下的一个类 ,它继承自内置的 dict,并扩展了默认值的功能。当访问不存在的键时,defaultdict 可以自动为这个键生成一个默认值,而不会抛出 KeyError 异常。

导入与创建 defaultdict

在使用 defaultdict 之前,需要从 collections 模块导入它:

python 复制代码
from collections import defaultdict

defaultdict 的创建需要提供一个工厂函数,这个工厂函数会在访问不存在的键时被调用来生成默认值。最常用的工厂函数是 int(用于计数器)、list(用于存储多个值)和 set(用于存储唯一值)。

python 复制代码
# 创建一个默认值为 0 的 defaultdict
dd = defaultdict(int)

# 当访问不存在的键时,会自动生成默认值
print(dd["key"])  # 输出: 0

defaultdict 的常见用法

计数器

假设我们需要统计一个字符串中每个字符出现的次数。使用普通字典时,我们通常需要检查键是否存在,然后再决定是增加计数还是初始化为 1。而使用 defaultdict,这一操作变得简单许多。

python 复制代码
from collections import defaultdict

text = "hello world"
char_count = defaultdict(int)

for char in text:
    char_count[char] += 1

print(char_count)  # 输出: defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

分组数据

假设有一组数据,想要根据某个特征对它们进行分组。使用 list 作为默认值,可以轻松实现这一功能。

python 复制代码
data = [("apple", "fruit"), ("carrot", "vegetable"), ("banana", "fruit"), ("spinach", "vegetable")]

grouped_data = defaultdict(list)

for item, category in data:
    grouped_data[category].append(item)

print(grouped_data)  # 输出: defaultdict(<class 'list'>, {'fruit': ['apple', 'banana'], 'vegetable': ['carrot', 'spinach']})

集合去重

在某些情况下,需要将值按某个特征分类,但确保每个分类中不包含重复元素。这时可以使用 set 作为默认值。

python 复制代码
data = [("apple", "fruit"), ("banana", "fruit"), ("apple", "fruit"), ("carrot", "vegetable")]

unique_items = defaultdict(set)

for item, category in data:
    unique_items[category].add(item)

print(unique_items)  # 输出: defaultdict(<class 'set'>, {'fruit': {'banana', 'apple'}, 'vegetable': {'carrot'}})

defaultdict 与普通字典的区别

defaultdict 和普通字典在大多数操作上类似,但它们有一个关键区别:默认值的生成。

  • 普通字典:访问一个不存在的键时,会抛出 KeyError 异常。我们需要显式检查键是否存在,或者使用 dict.get()方法提供一个默认值。

    python 复制代码
    d = {}
    print(d.get("key", 0))  # 输出: 0
  • defaultdict:访问不存在的键时,不会抛出异常,而是自动调用工厂函数生成一个默认值。

    python 复制代码
    dd = defaultdict(int)
    print(dd["key"])  # 输出: 0

此外,defaultdict 在初始化时需要指定一个工厂函数,而普通字典则不需要。

相关推荐
代码山河15 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行15 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
HideF15 小时前
Linux
linux·服务器·网络
梯度下降者15 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
“AI国潮设计-小江”17 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
Ruiery17 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
乌恩大侠17 小时前
从 AI-RAN 到 AI Agent:基于 NVIDIA Nemotron 构建 5G/6G 智能网络故障诊断系统
服务器·人工智能·5g·o-ru·ai-ran·电信大模型
benchmark_cc18 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读18 小时前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放18 小时前
Python基础语法练习题(73)
java·前端·python