python中defaultdict方法的使用详解

yizhihongxing

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 中由 yield 实现异步操作

    首先,我们需要了解协程和生成器的概念。协程指的是用户态的线程,由程序员控制,可以根据实际需求进行协作式多任务处理;而生成器是一种特殊的函数,可以将函数的执行过程分解成多段,每次返回一个值,调用方可以恢复函数执行过程,并传入新的值。 在 Python 中,我们可以通过 yield 关键字实现生成器,同时也可以将其作为协程的一种实现方式,从而实现异步操作。 下面…

    python 2023年6月3日
    00
  • Python语言生成水仙花数代码示例

    下面是关于Python语言生成水仙花数代码示例的完整攻略。 什么是水仙花数? 所谓水仙花数,指的是一个三位数,它的各位数字的立方和等于该数字本身。例如,153就是一个水仙花数,因为1^3+5^3+3^3=153。 生成水仙花数的代码实现 以下是一个Python语言生成水仙花数的简单代码示例: for i in range(100, 1000): sum = …

    python 2023年5月31日
    00
  • python实现树的深度优先遍历与广度优先遍历详解

    下面是详细讲解“Python实现树的深度优先遍历与广度优先遍历详解”的完整攻略。 1. 什么是树 树是一种非线性数据结构,它由若干个节点组成,每个节点可以有若干个子节点。树节点之间存在一种层次关系,其中上面的节点称根节点,最下面的节点称为叶子节点。 2. 树的遍历 树的遍历是指按照一定的顺序访问树的所有节点。常见的树的遍历方式有深度优先历和广度优先遍历。 2…

    python 2023年5月14日
    00
  • Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法

    请看以下步骤: 1. 安装cx_Oracle模块 在命令行中运行以下命令安装: pip install cx_Oracle 2. 导入模块并连接Oracle数据库 import cx_Oracle conn = cx_Oracle.connect(‘USER/PASSWORD@HOST:PORT/SERVICE_NAME’) # USER为用户名,PASSW…

    python 2023年6月3日
    00
  • 简单解决Python文件中文编码问题

    下面就给您讲解一下“简单解决Python文件中文编码问题”的攻略。 问题背景 在Python编程过程中,经常会遇到中文编码问题,比如在读取外部文本文件时系统返回乱码或者在程序中使用中文字符串时报错等等。这些问题通常都是因为在不同操作系统或者编译器下,对于中文字符的编码方式存在差异导致的。 攻略 基于以上问题,我们可以从以下几个方面来简单解决Python文件中…

    python 2023年5月20日
    00
  • 用python实现文件备份

    用Python实现文件备份攻略 在实际工作中,我们经常会需要对重要的文件进行备份,以免数据丢失等问题发生。Python作为一种高效、易学且功能强大的编程语言,可以很方便地实现文件备份功能。 以下是详细的实现步骤: 1. 安装Python 在开始之前,需要确保本地已经安装了Python。如果没有安装,可以从Python官网(https://www.python…

    python 2023年5月13日
    00
  • 完美解决Get和Post请求中文乱码的问题

    完美解决Get和Post请求中文乱码的问题 作为网站开发人员,经常需要处理HTTP请求中的中文参数,但有时候这些中文参数会出现乱码,影响了网站的正常运行。下面将详细介绍如何完美解决Get和Post请求中文乱码的问题。 一、Get请求中文乱码问题解决方案 在Get请求中,中文参数会被URL编码,以便可以在HTTP协议中传输。然而,在有些情况下,浏览器对URL编…

    python 2023年5月20日
    00
  • 详解python做UI界面的方法

    下面是关于“详解Python做UI界面的方法”的完整攻略: 1、Python做UI界面的方法 Python中常用的UI库有Tkinter、PyQt、wxPython等。这些UI库的实现原理和语法风格都不尽相同,但它们都可以实现窗口、按钮、标签等基础控件的创建和布局,以及响应用户的操作,完成界面的交互效果。 在选择UI库时,需要考虑开发的平台、开发人员的经验和…

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