collections.defaultdict(int)

ops/2024/9/25 21:25:37/

collections.defaultdict 是 Python collections 模块中的一个类,它提供了一种便捷的方式来创建带有默认值的字典。当你尝试访问一个不存在的键时,它会自动为该键创建一个默认值。这在处理计数、分类等任务时特别有用。

collections.defaultdict(int) 特别常见,它创建了一个默认值为 0 的字典。当你尝试访问一个不存在的键时,该键会自动被初始化为 0。这是因为 int() 返回 0

例子

import collections# 创建一个默认值为0的defaultdict
count_dict = collections.defaultdict(int)# 访问一个不存在的键
print(count_dict['a'])  # 输出0,因为键'a'不存在且默认值为0# 给键'a'赋值
count_dict['a'] += 1
print(count_dict['a'])  # 输出1,因为我们给键'a'增加了1# 给键'b'赋值
count_dict['b'] += 3
print(count_dict['b'])  # 输出3,因为我们给键'b'增加了3# 访问一个还未赋值的键
print(count_dict['c'])  # 输出0,因为键'c'不存在且默认值为0
详细解释
  1. 导入 collections 模块

    import collections 
  2. 创建 defaultdict 实例

    count_dict = collections.defaultdict(int) 

    这里 defaultdict(int) 创建了一个字典,其默认工厂函数是 int()。当访问一个不存在的键时,这个键会被自动初始化为 0

  3. 访问不存在的键

    print(count_dict['a']) # 输出0 

    尝试访问键 'a',因为 'a' 不存在,所以 defaultdict 会调用 int() 并返回 0。然后,'a' 被初始化并存储在字典中,值为 0

  4. 给键赋值

    count_dict['a'] += 1 print(count_dict['a']) # 输出1 

    'a' 的值增加了 1,现在键 'a' 的值为 1

  5. 给另一个键赋值

    count_dict['b'] += 3 print(count_dict['b']) # 输出3 

    'b' 的值增加了 3,现在键 'b' 的值为 3

  6. 再次访问一个不存在的键

    print(count_dict['c']) # 输出0 

    尝试访问键 'c',因为 'c' 不存在,所以 defaultdict 会调用 int() 并返回 0。然后,键 'c' 被初始化并存储在字典中,值为 0

适用场景

使用 collections.defaultdict(int) 主要适用于需要对项目进行计数的场景,比如:

  1. 统计单词出现频率

    words = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
    word_count = collections.defaultdict(int)
    for word in words:word_count[word] += 1
    print(word_count)  # 输出: defaultdict(<class 'int'>, {'apple': 3, 'banana': 2, 'orange': 1})
  2. 统计字符出现频率

    text = "hello world"
    char_count = collections.defaultdict(int)
    for char in text:char_count[char] += 1
    print(char_count)  # 输出: defaultdict(<class 'int'>, {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})

    defaultdict 提供了一种方便的方法来避免显式的初始化操作,使代码更简洁易读。


http://www.ppmy.cn/ops/48861.html

相关文章

算法:位运算题目练习

目录 常见的位运算的操作总结 ①基础位操作 ②给一个数n&#xff0c;确定它的二进制表示中的第x位是0还是1 ③将一个数n的二进制表示的第x位修改成1 ④将一个数n的二进制表示的第x位修改成0 ⑤位图的思想 ⑥提取一个数n二进制表示中最右侧的1 ⑦干掉一个数n二进制表示中…

【知识点】std::thread::detach std::lock_guard std::unique_lock

在 C11 中&#xff0c;std::thread 提供了并发编程的基础设施&#xff0c;使得我们可以创建和管理线程。std::thread 的 detach 方法是一种常用的线程管理方式&#xff0c;允许线程在后台独立运行&#xff0c;而不必与主线程同步或等待其完成。 std::thread::detach 方法 当你…

20240613日志:COPAL

Location: Beijing 1 大模型剪枝 Fig. 1.1大模型压缩-剪枝 剪枝的分类&#xff1a;结构化修剪对于简化大型语言模型和提高其效率尤其相关。非结构化修剪关注的是选择性地去除单个权重&#xff0c;旨在消除网络中不那么关键的连接。 修剪的基于阶段的分类&#xff1a;修剪可以在…

Vue3 中 props 与 emit 用法

在 Vue3 中&#xff0c;props 和 emit 的用法有所改变&#xff0c;主要的变化在于它们现在都通过 setup 函数来访问和使用。 props: props 用于父组件向子组件传递数据。在 setup 函数中&#xff0c;props 是一个参数&#xff0c;我们可以通过它访问到父组件传入的所有 prop 值…

Python跳动的爱心(双爱心版)

目录 系列文章 前言 Turtle简介 Python跳动的爱心 尾声 系列文章 序号文章目录直达链接表白系列1无法拒绝的表白界面https://want595.blog.csdn.net/article/details/1347448942满屏飘字表白代码https://want595.blog.csdn.net/article/details/1350373883无限弹窗表白代…

基于栅格占据概率和距离场的机器人覆盖轨迹模拟

基于栅格占据概率和距离场的机器人覆盖轨迹模拟 简介 辐射场模型实现 理论基础 指数函数建模 我们使用指数函数来表示机器人在某个栅格上停留时间对覆盖概率的影响: p ( t ) 1 − e − λ t p(t) 1 - e^{-\lambda t} p(t)1−e−λt 其中 λ \lambda λ 是控制增长速率…

移动硬盘打不开怎么办?原因解析!

移动硬盘是一种方便携带、快速传输大量数据的存储设备。但有时我们会遇到这样的问题&#xff1a;插上电脑后&#xff0c;移动硬盘无法打开&#xff0c;出现各种错误提示。这时候我们该怎么办呢&#xff1f; 以下是一些可能导致移动硬盘打不开的原因及解决方法&#xff1a; 1.硬…

前端HTML相关知识

1.什么是HTML HTML 指的是超文本标记语言 ( HyperText Markup Language )。 超文本:是指页面内可以包含图片、链接、声音,视频等内容 标记:标签(通过标记符号来告诉浏览器网页内容该如何显示) 浏览器根据不同的HTML标签&#xff0c;解析成我们看到的网页 2.HTML的特点 HTML不…