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

python defaultdict用法

摘要

使用 defaultdict 可以简化处理字典中缺失键的情况。以下是几个使用 defaultdict 的示例,展示了它在不同场景下的应用。

示例 1:分组文件

假设我们有一组文件名,想要根据文件扩展名将它们分组。我们可以使用 defaultdict 来实现这一点。

from collections import defaultdict# 假设我们有以下文件名
files = ['document.txt', 'image.png', 'presentation.pptx', 'notes.txt', 'photo.jpg']# 创建一个 defaultdict,默认值为列表
grouped_files = defaultdict(list)# 遍历文件名并根据扩展名分组
for file in files:# 获取文件扩展名extension = file.split('.')[-1]# 将文件添加到对应扩展名的列表中grouped_files[extension].append(file)# 打印分组结果
print(grouped_files)

输出结果:

defaultdict(<class 'list'>, {'txt': ['document.txt', 'notes.txt'], 'png': ['image.png'], 'pptx': ['presentation.pptx'], 'jpg': ['photo.jpg']})

示例 2:计数器

使用 defaultdict 可以轻松实现计数器,统计每个元素出现的次数。

from collections import defaultdict# 假设我们有一组单词
words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']# 创建一个 defaultdict,默认值为 0
word_count = defaultdict(int)# 统计每个单词的出现次数
for word in words:word_count[word] += 1# 打印计数结果
print(word_count)

输出结果

defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})

示例 3:嵌套字典

defaultdict 还可以用于创建嵌套字典,方便处理多层次的数据结构。

from collections import defaultdict# 创建一个嵌套的 defaultdict
nested_dict = lambda: defaultdict(lambda: defaultdict(int))
data = nested_dict()# 添加数据
data['A']['X'] += 1
data['A']['Y'] += 2
data['B']['X'] += 3# 打印嵌套字典
print(data)

输出结果

defaultdict(<function <lambda> at 0x...>, {'A': defaultdict(<function <lambda>.<locals>.<lambda> at 0x...>, {'X': 1, 'Y': 2}), 'B': defaultdict(<function <lambda>.<locals>.<lambda> at 0x...>, {'X': 3})})

示例 4:自定义默认值

你还可以定义自定义的默认值函数,以便在访问缺失键时返回特定的值。

from collections import defaultdict# 自定义默认值函数
def default_value():return "Not Found"# 创建 defaultdict,使用自定义函数
custom_dict = defaultdict(default_value)# 访问一个不存在的键
print(custom_dict['missing_key'])  # 输出: Not Found

示例5:单词首字母索引

统计单词按首字母分组:

from collections import defaultdictwords = ["apple", "banana", "cherry", "avocado", "blueberry"]
index = defaultdict(list)for word in words:first_char = word[0]index[first_char].append(word)print(index['a'])  # 输出:['apple', 'avocado']

示例6:学生成绩分组

按分数段自动归类学生姓名:

from collections import defaultdictstudents = [("Alice", 85), ("Bob", 72), ("Charlie", 90), ("David", 65)]
score_groups = defaultdict(list)for name, score in students:group = score // 10 * 10  # 按10分分段(如60-69, 70-79)score_groups[group].append(name)print(score_groups[70])  # 输出:['Bob']

示例7:图结构邻接表

构建图的邻接表表示:

from collections import defaultdictedges = [("A", "B"), ("A", "C"), ("B", "D"), ("C", "D")]
graph = defaultdict(list)for u, v in edges:graph[u].append(v)print(graph['A'])  # 输出:['B', 'C']

总结

defaultdict 是一个强大的工具,可以帮助我们简化字典操作,避免 KeyError 的出现。通过以上示例,我们可以看到它在分组、计数、嵌套字典和自定义默认值等场景中的应用。

http://www.lryc.cn/news/538607.html

相关文章:

  • Java 与设计模式(15):模板方法模式
  • ubuntu更新失败:apt-get install -f Transaction failed: 软件包系统已损坏
  • 16-使用QtChart创建动态图表:入门指南
  • C++ | 虚函数
  • 单元测试整理
  • Delphi语言的软件工程
  • XSS攻击(跨站脚本攻击)详解与实战
  • 【C++指南】类和对象(十):const成员函数
  • 数值分析与科学计算导引——误差与算法举例
  • ubuntu安装docker 无法拉取问题
  • 【C++项目】Rpc通信框架设计
  • 八股取士--dockerk8s
  • Autojs: 使用 SQLite
  • 思科、华为、H3C常用命令对照表
  • 解决 `pip is configured with locations that require TLS/SSL` 错误
  • 2025-arXiv-OmniThink:通过思考扩展机器写作的知识边界
  • 【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
  • 机器学习:01数学基础教程
  • 仿叮咚买菜鸿蒙原生APP
  • WordPress“更新失败,响应不是有效的JSON响应”问题的修复
  • kotlin的onFailure: () -> Unit
  • 通过网线将Keysight DSOX4154A示波器信号传输至电脑的Step
  • midjourney 一 prompt 提示词
  • 微信小程序 - 网络请求基础路径集中管理(基础路径集中管理策略、动态切换基础路径)
  • C#的委托delegate与事件event
  • apache artemis安装
  • Lightning基础训练尝试实例
  • osgearth视点坐标及鼠标交点坐标的信息显示(七)
  • 动态规划 之 背包问题
  • 【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建