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

【Python 语法】collections 模块的字典类 defaultdict

    • 默认字典 (`defaultdict`) 的语法
    • `defaultdict` 的常见应用场景
      • 1. 计数
      • 2. 分组
      • 3. 嵌套字典

defaultdict 是 Python 中 collections 模块提供的一个字典类,它和普通字典( dict)的主要区别在于 提供了一个默认值,可以避免在访问字典中不存在的键时抛出 KeyError 异常。

  • defaultdictdict 的一个变种,它通过 default_factory 自动为不存在的键提供默认值,避免了 KeyError 异常。
  • 它的工厂函数(default_factory)可以是 intlistsetdict 等。
  • 在需要计数、分组、或者处理嵌套数据结构时,defaultdict 能让代码更加简洁、清晰。

默认字典 (defaultdict) 的语法

defaultdict 的基本语法如下:

from collections import defaultdict# 创建一个 defaultdict
d = defaultdict(default_factory)
  • default_factory 是一个工厂函数,用来为不存在的键提供默认值。如果不指定,defaultdict 会默认返回 None
  • default_factory 可以是任何返回值的函数,比如 int()(返回 0)、list()(返回空列表)、dict()(返回空字典)等。

defaultdict 的常见应用场景

1. 计数

  • 使用 int 作为 default_factory,可以非常方便地进行计数(例如,统计字符串中各个字符的频率)。
from collections import defaultdicttext = "hello world"
count = defaultdict(int)for char in text:count[char] += 1print(count)
# 输出: defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

2. 分组

  • 使用 listset 作为 default_factory,可以方便地将数据 按某种标准分组
from collections import defaultdictitems = [('a', 1), ('b', 2), ('a', 3), ('b', 4), ('c', 5)]
grouped = defaultdict(list)for key, value in items:grouped[key].append(value)print(grouped)
# 输出: defaultdict(<class 'list'>, {'a': [1, 3], 'b': [2, 4], 'c': [5]})

3. 嵌套字典

  • 使用 dict 作为 default_factory,可以轻松创建嵌套字典结构,避免手动初始化每一层。
from collections import defaultdictnested_dict = defaultdict(lambda: defaultdict(int))# 向字典中添加嵌套元素
nested_dict['a']['x'] = 10
nested_dict['a']['y'] = 20
nested_dict['b']['x'] = 30print(nested_dict)
# 输出: defaultdict(<function <lambda> at 0x7fc7f08d90d0>, {'a': defaultdict(<class 'int'>, {'x': 10, 'y': 20}), 'b': defaultdict(<class 'int'>, {'x': 30})})
http://www.lryc.cn/news/540583.html

相关文章:

  • 《论系统需求分析方法》写作心得 - 系统分析师
  • Jupyter里面的manim编程学习
  • Python之装饰器二 带参数的装饰器
  • rk3588/3576板端编译程序无法运行视频推理
  • 静态库与动态库区别
  • 鸿蒙-Canvas-图片滑动验证
  • Python应用算法之贪心算法理解和实践
  • 网络运维学习笔记 017HCIA-Datacom综合实验01
  • C++(17):为optional类型构造对象
  • Maven导入hutool依赖报错-java: 无法访问cn.hutool.core.io.IORuntimeException 解决办法
  • Simulink库浏览器中有大量的模型组件工具箱介绍
  • 从0到1:固件分析
  • 模电知识点总结(6)
  • 【Java学习】多态
  • Oracle 深入理解Lock和Latch ,解析访问数据块全流程
  • 什么是事务?并发事务引发的问题?什么是MVCC?
  • 【JavaEE进阶】MyBatis通过注解实现增删改查
  • Uptime Kuma实现业务接口自定义逻辑监控
  • 基于 JavaWeb 的 Spring Boot 调查问卷管理系统设计和实现(源码+文档+部署讲解)
  • 新手小白学习棒球规则·棒球1号位
  • 单元测试的策略有哪些,主要包括什么?
  • 深度学习之图像回归(一)
  • Docker 替换到 Containerd (nerdctl相关指令)
  • Ollama API 参考文档
  • PHP房屋出租出售高效预约系统小程序源码
  • 学习threejs,使用MeshBasicMaterial基本网格材质
  • Kafka Connect 功能介绍
  • 从卡顿到丝滑:火山引擎DeepSeek-R1引领AI工具新体验
  • Vulnhub-node靶机教学
  • php处理图片出现内存溢出(Allowed memory size of 134217728 bytes exhausted)