当前位置: 首页 > news >正文

玩转python:通俗易懂掌握高级数据结构:collections模块之defaultdict

引言

defaultdict是Python中collections模块提供的一个强大工具,它是dict的子类,能够在访问不存在的键时自动生成默认值,避免KeyError异常。它非常适合用于分组统计、图结构表示、数据聚合等场景。本文将详细介绍defaultdict的关键用法和特性,并通过8个丰富的案例帮助读者掌握其应用。


关键用法和特性表格
特性/方法描述
默认值工厂在访问不存在的键时,自动调用工厂函数生成默认值。
避免KeyError无需手动检查键是否存在,避免KeyError异常。
初始化使用defaultdict(default_factory)创建。
字典操作支持所有字典操作,如键值访问、更新、删除等。
default_factory返回默认值工厂函数。

1. defaultdict的概念

defaultdictcollections模块中的一个类,它是dict的子类。它的主要特点是:

  • 默认值工厂:在访问不存在的键时,自动调用工厂函数生成默认值。
  • 避免KeyError:无需手动检查键是否存在,避免KeyError异常。
  • 高效性能:与普通字典相比,defaultdict在访问不存在的键时更加高效。

2. defaultdict的用法

2.1 创建defaultdict
from collections import defaultdict

# 创建一个默认值为0的defaultdict
dd = defaultdict(int)
print(dd['a'])  # 输出: 0(自动生成默认值)
2.2 访问不存在的键
# 访问不存在的键
print(dd['b'])  # 输出: 0(自动生成默认值)
2.3 更新值
# 更新值
dd['a'] += 1
print(dd['a'])  # 输出: 1

3. defaultdict的常见方法

3.1 default_factory:查看默认值工厂
print(dd.default_factory)  # 输出: <class 'int'>
3.2 修改默认值工厂
# 修改默认值工厂为list
dd = defaultdict(list)
dd['a'].append(1)
print(dd['a'])  # 输出: [1]

4. defaultdict的8个应用案例

案例1:统计字符频率
# 统计字符串中字符的频率
s = "abracadabra"
char_count = defaultdict(int)
for char in s:
    char_count[char] += 1
print(char_count)  # 输出: defaultdict(<class 'int'>, {'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
案例2:分组统计
# 按首字母分组
data = ['apple', 'banana', 'orange', 'avocado']
grouped = defaultdict(list)
for word in data:
    grouped[word[0]].append(word)
print(grouped)  # 输出: defaultdict(<class 'list'>, {'a': ['apple', 'avocado'], 'b': ['banana'], 'o': ['orange']})
案例3:统计单词频率
# 统计一段文本的单词频率
text = "Python is great. Python is easy. Python is powerful."
words = text.split()
word_count = defaultdict(int)
for word in words:
    word_count[word] += 1
print(word_count)  # 输出: defaultdict(<class 'int'>, {'Python': 3, 'is': 3, 'great.': 1, 'easy.': 1, 'powerful.': 1})
案例4:表示图结构
# 使用defaultdict表示图结构
graph = defaultdict(list)
graph['A'].append('B')
graph['A'].append('C')
graph['B'].append('D')
print(graph)  # 输出: defaultdict(<class 'list'>, {'A': ['B', 'C'], 'B': ['D']})
案例5:统计列表中元素的频率
# 统计列表中元素的频率
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
freq = defaultdict(int)
for num in data:
    freq[num] += 1
print(freq)  # 输出: defaultdict(<class 'int'>, {1: 1, 2: 2, 3: 3, 4: 4})
案例6:统计多个数据集的聚合结果
# 统计多个数据集的聚合结果
data1 = ['apple', 'banana', 'apple']
data2 = ['banana', 'orange', 'banana']
combined = defaultdict(int)
for item in data1 + data2:
    combined[item] += 1
print(combined)  # 输出: defaultdict(<class 'int'>, {'apple': 2, 'banana': 3, 'orange': 1})
案例7:统计投票结果
# 统计投票结果
votes = ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Alice']
vote_count = defaultdict(int)
for candidate in votes:
    vote_count[candidate] += 1
print(vote_count)  # 输出: defaultdict(<class 'int'>, {'Alice': 3, 'Bob': 2, 'Charlie': 1})
案例8:统计文件中的单词频率
# 统计文件中单词的频率
with open('example.txt', 'r') as file:
    words = file.read().split()
    word_count = defaultdict(int)
    for word in words:
        word_count[word] += 1
    print(word_count.most_common(5))  # 输出文件中出现频率最高的5个单词

总结

defaultdict是Python中一个非常实用的工具,能够简化代码并提升效率。通过本文的详细讲解和8个实际案例,大家可以快速掌握defaultdict的使用方法,并在实际项目中灵活应用。

http://www.dtcms.com/a/69660.html

相关文章:

  • Vue 项目中 CDN 引入的利弊及解决方案
  • ASP.NET MVC-构建服务层+注入服务
  • GC 频率和触发条件
  • Unity光线追踪移动端降级适配技术指南
  • Vue.js 状态管理:从本地状态到全局状态管理
  • 深入理解 Maven BOM 及其继承特性
  • 在Linux中安装Nginx
  • HarmonyOS NEXT - 电商App实例四(登录界面)
  • Unity Timeline 扩展
  • 【langchain/入门】使用langchain调用本地部署的大模型(以llama.cpp以及ollama为例)
  • maxkb安装部署
  • 企业的应用系统
  • 第四章 podman桌面版使用及Portainer UI的安装使用
  • maxwell
  • Ubuntu 24.04 Rootless Docker 安装指南
  • 动态参数二维码统计:构建APP渠道追踪体系
  • DeepSeek-R1 面试 -—— GRPO
  • 使用联核科技四向穿梭车能给企业带来哪些效益?
  • LeetCode 第4题:寻找两个正序数组的中位数
  • Linux的chmod命令,给文件设置权限
  • 【Agent实战】货物上架位置推荐助手(RAG方式+结构化prompt(CoT)+API工具结合ChatGPT4o能力Agent项目实践)
  • STC89C52单片机学习——第17节: [7-1]定时器
  • vue中常见面试题(会不断更新版)
  • 深度解读DeepSeek部署使用安全(48页PPT)(文末有下载方式)
  • 鸿蒙移动应用开发--UI组件及应用
  • Unity打包Android平台调用sherpa-onnx
  • 【VUE2】第五期——VueCli创建项目、Vuex多组件共享数据、json-server——模拟服务端api
  • MySQL隐式依赖引发的字段长度溢出:一次触发器事故的深度剖析
  • RK3588 openssl-3.4.1 编译安装
  • esProc SPL vs DuckDB:多源数据处理谁更胜一筹?