当前位置: 首页 > 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的使用方法,并在实际项目中灵活应用。

相关文章:

  • 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命令,给文件设置权限
  • 《AI×SCIENCE十大前沿观察》9:合成数据和数据基础设施
  • 均价19.5万元/平米!上海徐汇滨江地王项目“日光”,销售额近70亿元
  • “80后”李灿已任重庆市南川区领导,此前获公示拟提名为副区长人选
  • 非洲雕刻艺术有着怎样的“变形之美”
  • 一生要出片的年轻人,买爆相机
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任