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

玩转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.kler.cn/a/588952.html

相关文章:

  • Android第二次面试总结(项目拷打实战)
  • 线性代数(1)用 excel 计算鸡兔同笼
  • 0CTF 2016 piapiapia 1
  • Kafka的流量控制机制
  • 玩转python:通俗易懂掌握高级数据结构-collections模块之UserList
  • AI大语言模型LLM学习-基于Vue3的AI问答页面
  • 深入解析前后端分离架构:原理、实践与最佳方案
  • [IP]RGMII
  • 通过deepseek学习lua写网页
  • 人工智能与机器学习——系统学习规划
  • 鸿蒙应用开发—ZDbUtil高效使用数据库
  • 82.HarmonyOS NEXT 性能优化指南:从理论到实践
  • 【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析
  • 【RabbitMQ】rabbitmq在spring boot中的使用
  • 交互式可视化进阶(Plotly Dash构建疫情仪表盘)
  • SpringBoot启动过程有哪些步骤(源码详细分析)
  • 【大模型科普】大模型:人工智能的前沿(一文读懂大模型)
  • 图像处理篇---图像预处理
  • Java EE(11)——文件I(input)/O(output)
  • 新矩阵(信息学奥赛一本通-2041)