python 中defaultdict()对字典进行初始化的用法介绍

下面是关于“python 中defaultdict()对字典进行初始化的用法介绍”的详细攻略:

什么是 defaultdict()

在Python中,我们经常需要使用字典(dict)这个数据结构,字典是一个无序的键值对(key-value)集合,每个键都不同,且可以通过键来访问其对应的值。但是,当我们要使用一个没有初始化的字典时,如果该字典中的键还不存在时(类似于空缺),那么我们会遇到一个 KeyError,导致程序崩溃。这时就需要使用 defaultdict() 进行字典的初始化了。

defaultdict是python内置模块collections中的类,它的一个重要特点就是支持默认值。当我们使用 defaultdict() 初始化一个空字典时(我们在初始化时要传入一个默认值参数),如果在字典中查询一个不存在的key,它就会返回这个默认值,而不是一堆错误。

defaultdict()的参数

defaultdict()的唯一一个参数是default_factory,可以是一个函数/类类型/字符串等,它定义了默认值的类型和值。当我们使用字典时,如果字典中不存在查询的key值,那么程序不会报错而是直接创建一个默认值并返回,这个默认值可以在 defaultdict() 的调用时定义。

defaultdict()的用法

首先,我们需要导入collections模块中的defaultdict类:

from collections import defaultdict

接下来,我们创建一个 defaultdict 对象,并将一个列表作为默认值:

numbers = defaultdict(list)

这个列表可以作为所有缺失键的默认值。我们可以像使用普通字典一样使用 defaultdict。

例如,我们添加两个新键,然后在尝试访问一个不存在的键时,它会返回一个新的空列表。

numbers['one'].append(1)
numbers['two'].append(2)
numbers['three'].append(3)
print(numbers['one'])
# output: [1]
print(numbers['four'])
# output: []

我们还可以将默认值设置为int,类似于下面这样:

counts = defaultdict(int)

这样做可以在尝试访问不存在的键时返回0,例如:

counts['one'] += 1
counts['two'] += 2
counts['three'] += 3
counts['four'] += 4
print(counts)
# output: defaultdict(<class 'int'>, {'one': 1, 'two': 2, 'three': 3, 'four': 4})

defaultdict()的示例

下面给出一个 defaultdict() 的示例,用于统计每个词出现的次数:

from collections import defaultdict
words = [
    'apple', 'banana', 'orange',
    'apple', 'banana', 'banana',
    'orange', 'orange', 'orange'
]
word_count = defaultdict(int)
for word in words:
    word_count[word] += 1
print(word_count)
# output: defaultdict(<class 'int'>, {'apple': 2, 'banana': 3, 'orange': 4})

在这个示例中,我们将 defaultdict() 初始化为一个int类型,表示默认值为0,然后遍历给定的单词列表,对每个单词进行计数。如果一个单词在字典中不存在,那么它的默认值将自动为0,然后我们可以简单地将次数加1。

最后输出字典中每个单词出现的次数。

另外一个示例是,我们可以使用 defaultdict() 来寻找字符串中出现次数最多的字符。代码如下:

from collections import defaultdict
string = 'abacdddefg'
char_count = defaultdict(int)
for char in string:
    char_count[char] += 1
most_frequent_char, count = max(char_count.items(), key=lambda x: x[1])
print(f'The most frequent character is "{most_frequent_char}", which appears {count} times.')
# output: The most frequent character is "d", which appears 3 times.

在这个例子中,我们首先用 defaultdict() 创建了一个计数字典,将每个字符的出现次数增加1。然后,我们使用 Python内置函数max()查找char_count.items()中出现次数最多的项目,并返回其键和值作为元组,其中 lambda函数根据每个项目的值进行排序。最后我们输出出现最频繁的字符和其出现次数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 中defaultdict()对字典进行初始化的用法介绍 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 教你用Python读取CSV文件的5种方式

    教你用Python读取CSV文件的5种方式 CSV是一种常见的数据格式,如果你需要使用Python对CSV文件进行处理,这篇文章将会教你5种读取CSV文件的方式。 方法1: 使用csv.reader csv.reader是Python内置模块csv中用于读取CSV文件的函数。我们首先需要导入csv模块,然后使用csv.reader打开文件并读取CSV内容。 …

    python 2023年6月3日
    00
  • Python 常用 PEP8 编码规范详解

    下面是《Python 常用 PEP8 编码规范详解》的完整攻略: Python 常用 PEP8 编码规范详解 什么是 PEP8? PEP8 (Python Enhancement Proposal #8) 是 Python 官方推荐的编码规范,旨在使 Python 代码更易读、易维护和规范化。PEP指的是Python Enhancement Proposal…

    python 2023年5月31日
    00
  • Python如何计算语句执行时间

    下面是Python如何计算语句执行时间的完整攻略: 方法一:使用time模块 import time start_time = time.time() # 待计算时间的代码语句 for i in range(1000000): pass end_time = time.time() elapsed_time = end_time – start_time p…

    python 2023年6月2日
    00
  • python正则表达式面试题解答

    以下是详细讲解“Python正则表达式面试题解答”的完整攻略,包括正则表达式的基础知识、常见问题和两个示例说明。 正则表达式基础知识 正则表达式是一种用来描述文本模式的语言,可以用来匹配、查找和换文本。Python中,我们可以使用re模块来实现正则表达式。 下面是一些常用的正则表达式元字符: .:匹配任意字符。 *:匹配前面的字符0次或多次。 +:匹配前面的…

    python 2023年5月14日
    00
  • 浅谈Python处理json字符串为什么不建议使用eval()

    下面是详细讲解: 为什么不建议使用eval()处理json字符串 在处理json字符串时,可能会想到使用Python内置的eval()函数快速地将json字符串转换为Python对象。但是,使用eval()函数存在着一些潜在的问题,下面我们逐一进行说明。 1. 安全性问题 首先,使用eval()函数需要非常小心,因为它不仅仅能够将json字符串转换为Pyth…

    python 2023年6月3日
    00
  • 解决PyCharm同目录下导入模块会报错的问题

    当我们在PyCharm中编写Python程序并导入自定义模块时,有时可能会遇到ModuleNotFoundError等错误提示,提示无法找到模块。 这是因为在PyCharm同一目录下,我们需要正确设置模块搜索路径以正确导入模块。以下是解决此问题的标准步骤。 步骤一:创建Python包 在项目目录中创建一个名为mymodule的文件夹,并将需要导入的自定义模块…

    python 2023年5月13日
    00
  • Python多处理池函数未定义

    【问题标题】:Python multiprocessing pool function not definedPython多处理池函数未定义 【发布时间】:2023-04-04 19:12:01 【问题描述】: 我需要实现一个使用任意包进行计算的多处理池。为此,我使用 Python 和 joblib 0.9.0。这段代码基本上就是我想要的结构。 import…

    Python开发 2023年4月6日
    00
  • Python基于文件内容实现查找文件功能

    下面是Python基于文件内容实现查找文件功能的完整攻略: 1. 实现思路 要实现基于文件内容的查找文件功能,需要通过以下步骤进行实现: 用户输入文件路径和需要查找的关键词; 打开文件,逐行读取文件内容; 判断当前行是否包含关键词,若包含则输出文件路径及当前行; 继续逐行读取文件内容,直至到达文件末尾。 2. 代码实现 下面是一个简单的Python代码实现。…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部