当前位置: 首页 > 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 defaultdict

words = ["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 defaultdict

students = [("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 defaultdict

edges = [("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 的出现。通过以上示例,我们可以看到它在分组、计数、嵌套字典和自定义默认值等场景中的应用。

相关文章:

  • ios中常见的设计原则和设计模式
  • Hadoop集群安装与配置指南(CentOS 7)
  • 力扣LeetCode: 1742 盒子中小球的最大数量
  • 5-CDE说明
  • buu-jarvisoj_level2_x64-好久不见37
  • Ubuntu 上安装 Elasticsearch 7.6.0
  • 计算机毕业设计--基于深度学习技术(Yolov11、v8、v7、v5)算法的高效人脸检测模型设计与实现(含Github代码+Web端在线体验界面)
  • 接入 SSL 认证配置:满足等保最佳实践
  • 神经网络常见激活函数 12-Swish函数
  • 动态规划 之 排列与组合问题
  • SpringBoot(接受参数相关注解)
  • Unity序列化多态数组
  • PyQt6/PySide6 的 QThread 类
  • 18.Python实战:实现年会抽奖系统
  • 计算机网络原理试题二
  • 1317:【例5.2】组合的输出
  • Spring Boot中如何自定义Starter
  • DC-6靶机渗透测试全过程
  • matlab平面波展开法计算的二维声子晶体带隙
  • 代码讲解系列-CV(三)——Transformer系列
  • 咖啡戏剧节举办第五年,上生新所“无店不咖啡,空间皆可戏”
  • 全球第七个迪士尼主题公园将落户阿布扎比
  • 三大交易所多举措支持科创债再扩容,约160亿证券公司科创债有望近期落地
  • 金球看淡,不服就干!这是抬不起腿却昂着头的劳塔罗
  • 新疆生产建设兵团草湖项目区副主任宋全伟接受审查调查
  • 巴基斯坦宣布关闭全国空域48小时