python中defaultdict方法的使用详解

Python中defaultdict方法的使用详解

defaultdict是Python标准库collections中的一个类,它和内置字典(dict)的用法大致相同,但有一个区别:当你访问一个不存在的键时,defaultdict会自动创建这个键并将其对应的值赋为一个默认值。

defaultdict的构造函数

defaultdict的构造函数和dict的构造函数一样,可以不带任何参数或传入一个迭代器,示例代码如下:

from collections import defaultdict

dd1 = defaultdict()   # 没有指定默认值
dd2 = defaultdict(int)   # 指定默认值为0
dd3 = defaultdict(lambda: "default value")   # 指定默认值为一个自定义的函数,该函数返回"defualt value"
dd4 = defaultdict(list)   # 指定默认值为一个空列表

上述代码中,dd1dd2dd4的默认值分别为None0[]dd3则是通过一个lambda函数自定义了一个默认值。

defaultdict示例1:单词计数

假设我们从一个文本文件中读取了一段文本,并想要统计每个单词出现的次数。可以使用defaultdict来实现这个功能,示例代码如下:

from collections import defaultdict

text = "this is a test, test text. this is text, again."
words = text.split()

# 统计每个单词出现的个数
word_count = defaultdict(int)
for word in words:
    word_count[word] += 1

# 按照单词个数从高到低排序,并打印出出现次数最多的前10个单词
sorted_words = sorted(word_count.items(), key=lambda x: x[1], reverse=True)
for word, count in sorted_words[:10]:
    print(f"{word}: {count}")

运行上述代码,会输出以下结果:

is: 2
this: 2
test: 2
text: 2
a: 1
again.: 1
test,: 1

上述代码中,我们定义了一个word_countdefaultdict,默认值为0。当我们对一个不存在的单词进行访问时,defaultdict会自动创建这个单词,并将其对应的出现次数初始化为0。随后遍历words列表,将单词出现次数逐一累加到word_count中。最后使用sorted函数和lambda表达式按照单词出现次数从高到低排序,取出前10个单词输出。

defaultdict示例2:构建树形结构

假设我们想要构建一个树形结构,每个节点包含一个名称和多个子节点,我们可以借助defaultdict实现这个功能。示例代码如下:

from collections import defaultdict
from pprint import pprint

def add_node(tree, path):
    """
    向树形结构中添加一个节点
    tree: 根节点
    path: 节点的路径,从根节点到该节点的所有名称
    """
    node_name = path[0]
    if len(path) == 1:
        # 递归终止条件:当前节点为叶子节点
        tree[node_name] = {}
    else:
        # 递归调用:创建子节点,并将子节点加入到当前节点的字典中
        child_node = tree[node_name]
        add_node(child_node, path[1:])

# 构建树形结构
root_node = defaultdict(dict)
add_node(root_node, ["node1", "child1", "grandchild1"])
add_node(root_node, ["node1", "child2", "grandchild2"])
add_node(root_node, ["node2", "child3", "grandchild3"])

# 输出树形结构
pprint(root_node)

运行上述代码,会输出以下结果:

defaultdict(<class 'dict'>,
            {'node1': {'child1': {'grandchild1': {}},
                       'child2': {'grandchild2': {}}},
             'node2': {'child3': {'grandchild3': {}}}})

上述代码中,我们定义了一个函数add_node,用于向树形结构中添加一个节点。该函数的参数tree是当前节点所属的子树,path是从根节点到该子树的所有节点名称。具体实现是,将当前节点的名称node_namepath中取出,并判断如果子节点列表path的长度为1,说明当前节点是叶子节点,直接将tree[node_name]赋为空字典即可;否则将tree[node_name]赋为一个新的子字典,并递归调用add_node函数来创建子节点。

在主程序中,我们先定义了一个根节点root_node,默认值为一个空字典。然后调用add_node函数向树形结构中添加3个节点。最后使用pprint函数打印出树形结构,便于观察。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中defaultdict方法的使用详解 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 详解如何通过Python制作一个密码生成器

    详解如何通过Python制作一个密码生成器 本攻略将详细说明如何通过Python语言实现一个密码生成器。我们将使用Python内置的随机数库random来生成随机密码,并通过命令行参数来控制生成密码的规则。 步骤一:导入模块 无论我们想要做什么,首先要导入相关模块。在本例中,我们需要使用Python内置的random模块。 import random 步骤二…

    python 2023年6月3日
    00
  • 公认8个效率最高的爬虫框架

    下面是关于公认8个效率最高的爬虫框架的详细攻略。 1. Scrapy Scrapy 是当前最为流行、最为强大的 Python 爬虫框架之一,它可以帮助我们很方便地爬取页面并进行整理持久化,其中包含多级链接爬取、数据处理及输出功能。同时,Scrapy 的内容较为全面,支持非常丰富的功能扩展,适用于各种形式的网站爬取。 安装方式 scrapy 可以通过 pip …

    python 2023年6月3日
    00
  • Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作

    PyTorch是一个流行的深度学习框架,可实现自定义数据集的灵活性和效率。在本攻略中,我们将学习如何自定义PyTorch的数据集和数据加载器,并使用它们来去除存在或空数据的条目。 自定义数据集 自定义数据集需要继承PyTorch的Dataset类,并重写其中的__len__和__getitem__方法。其中,__len__方法用于返回数据集的长度,而__ge…

    python 2023年6月3日
    00
  • 一文带你学会Python Flask框架设置响应头

    一文带你学会Python Flask框架设置响应头 Flask是一款轻量级的Python Web框架,可以帮助开发者快速构建Web应用程序。在Flask框架中,可以通过设置响应头来控制Web应用程序的行为。以下是两个示例,介绍了如何使用Python Flask框架设置响应头。 示例一:使用Python Flask框架设置响应头 以下是一个示例,可以使用Pyt…

    python 2023年5月15日
    00
  • Python3使用tracemalloc实现追踪mmap内存变化

    Python3使用tracemalloc实现追踪mmap内存变化的完整攻略 介绍 在Python程序中实现追踪内存的变化是一项常见的任务。tracemalloc是一款Python标准库内置的用于追踪内存分配情况的工具,它可以帮助Python开发者更好地了解和监控自己的Python程序的内存情况。在本攻略中,我们将重点介绍如何使用tracemalloc来追踪m…

    python 2023年6月3日
    00
  • 用Python实现通过哈希算法检测图片重复的教程

    下面是详细讲解“用Python实现通过哈希算法检测图片重复的教程”,包含两个示例说明。 通过哈希算法检测图片重复 哈希算法是种将意长度的消息压缩到某一固定长度的算法在图片处理中,我们可以使用哈希算法来检测图片是否重。具体来说,我们可以将图片转换为哈希值,然后比较哈希值来判断图片是否相同。 用Python实现通过哈希算法检测图片重复的教程 下面是一个示代码,用…

    python 2023年5月14日
    00
  • python的数学算法函数及公式用法

    以下是关于“Python的数学算法函数及公式用法”的完整攻略: 简介 Python是一种强大的编程语言,它提供了许多数学算法函数和公式,可以用于解决各种数学问题。在本教程中,我们将介绍Python中常用的数学算法函数和公式,包括数学函数、线性代数、微积分、概率统计等。 数学函数 Python中常用的数学函数包括: abs(x):返回x的绝对值。 pow(x,…

    python 2023年5月14日
    00
  • Django视图之ORM数据库查询操作API的实例

    Django是一个用Python编写的Web框架,其中的ORM(Object-relational mapping)提供了一种以面向对象的方式操作数据库的方法,而ORM数据库查询操作API是Django ORM的核心组件之一,它可以让我们更方便的对数据进行操作。下面是实现ORM数据库查询操作API的步骤。 1. 配置数据库 在Django中使用ORM进行数据…

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