Python defaultdict:提升字典性能和易用性的利器

Python defaultdict:提升字典性能和易用性的利器在Python中,字典(dictionary)是一种非常常用的数据类型。它是一种可变容器模型,也是一种无序的键(key)和值(value)的对应关系,通过键可以快速地查到对应的值。Python字典的特点是:无序、可变、键唯一。

一、Python字典概述

在Python中,字典(dictionary)是一种非常常用的数据类型。它是一种可变容器模型,也是一种无序的键(key)和值(value)的对应关系,通过键可以快速地查到对应的值。Python字典的特点是:无序、可变、键唯一。

字典是Python中内置的一种数据结构,可以通过{}表示,其中键值对之间用冒号(:)隔开,每个键值对之间用逗号(,)隔开。

{
    Key1: Value1,
    Key2: Value2,
    Key3: Value3,
    ...
}

下面是一个简单的Python字典示例:

person = {
    'name': 'Tom',
    'age': 18,
    'gender': 'male'
}

如上所示,可以通过这种方式快速定义一个字典,其中三对键值分别是’name’、’age’和’gender’。可以通过键来获取其对应的值,例如:

print(person['name'])    # 输出'Tom'

通过上述代码可以看到,打印出了键’name’所对应的值’Tom’。

二、Python defaultdict的概述

Python的collections模块提供了defaultdict类,它是字典的一个子类,具有与普通字典相同的方法,但是可以为字典的任何不存在的键提供默认值。

默认值可以通过创建defaultdict对象时指定,并且所有键的默认值默认都是None。

defaultdict类是Python字典的扩展,它提供了一种更加优雅和易于使用的方法,她比Python字典更加高效,因为它没有在字典中添加缺失的键,而是直接在内部实现中使用默认值。

通过使用defaultdict类可以提高程序的可读性和性能。

三、Python defaultdict的用法

使用defaultdict可以在字典中查找不存在的键时返回一个默认值。可以通过创建defaultdict对象来指定所有键的默认值,例如:

from collections import defaultdict
nums = [1, 2, 3, 4, 5, 2, 3, 4, 5, 6]
d = defaultdict(int) # 所有键默认值为0
for num in nums:
    d[num] += 1
print(d)

上述示例中,使用了defaultdict来实现对nums序列中每个元素的计数。通过创建defaultdict(int)类实例,它默认将字典中不存在的键的值返回0,使用d[num] += 1代码实现计数。最后打印出得到的字典结果:

defaultdict(, {1: 1, 2: 2, 3: 2, 4: 2, 5: 2, 6: 1})

我们可以省略在字典中添加不存在键的步骤,这一过程可以交给defaultdict自动完成。

四、Python defaultdict的实战应用

下面我们将介绍一些实际应用场景中的Python defaultdict的用法。

1. 嵌套字典(Nested Dictionary)

在Python字典中,如果键本身又是另一个字典,我们就称其为嵌套字典。我们可以通过使用defaultdict来处理对于不存在的键访问,可以使得代码更加简洁和高效。

from collections import defaultdict
# 用来初始化默认字典
def default_factory():
    return [0, defaultdict(int)]
nested_dict = defaultdict(default_factory)
nested_dict['a'][1]['b'] = 1
print(datetime_dict)

上述示例中,可以看到首先我们定义一个名为default_factory的函数,用于初始化默认字典。在程序的后续操作中,我们通过default_factory指定每个键的默认值,可以看到这里我们使用了一个长度为2的列表,第一个元素是数字0,第二个元素是defaultdict(int)。

在示例中,我们对nested_dict[‘a’][1][‘b’]赋值为1,如果这个键不存在,那么它会被默认初始化为0和一个空的字典,这里的[1]是指index为1的元素,也就是嵌套字典中的第二个。

最终输出的结果如下:

defaultdict(, {'a': [0, defaultdict(, {'b': 1})]})

2. 使用lambda表达式设置默认值

除了可以使用defaultdict来指定默认值,还可以使用lambda表达式来设置默认值。可以看下面的一个简单的例子:

from collections import defaultdict
d = defaultdict(lambda:'None')
d['a'] = 'This is a'
d['b'] = 'This is b'
print(d['a'])     # 输出'This is a'
print(d['b'])     # 输出'This is b'
print(d['c'])     # 输出'None'

在上述示例中,我们使用了lambda表达式设置值的默认值,使用d[‘a’] = ‘This is a’和d[‘b’] = ‘This is b’来设置字典的值,如果字典中不存在对应的键的值,就会返回’None’。

3. 统计每个单词的频率

下面是一个更加实际的应用场景,用Python defaultdict来统计一个英文文本中每个单词出现的频率。

import re
from collections import defaultdict
filename = 'input.txt'
words_freq = defaultdict(int)
with open(filename) as f:
    for line in f:
        words = re.findall('\w+', line)
        for word in words:
            words_freq[word] += 1
print(words_freq)

此处,我们使用了Python内置的re模块,通过正则表达式来提取输入文本中的单词,使用defaultdict(int)来初始化一个字典,将每个单词作为键,它们在文中出现的次数作为值。

最后,我们通过打印 words_freq 字典,得到如下所示的结果:

defaultdict(, {'hello': 2, 'world': 2, 'python': 3, 'is': 2, 'awesome': 1})

4. 初始化有向图

下面是一个实际应用场景的示例:通过使用Python defaultdict来初始化一个有向图。

from collections import defaultdict
graph = defaultdict(list)
graph['A'].append('B')
graph['A'].append('C')
graph['B'].append('D')
graph['C'].append('D')
graph['D'].append('E')
graph['E'].append('F')
print(graph)

上述代码中,我们使用defaultdict(list)初始化一个空字典,将每个键的值初始化为一个空列表。在代码的后续操作中,我们使用append方法来将每个节点相邻的节点添加到列表中。

在上述示例中,可以看到我们初始化了有向图中6个节点,分别是’A’、’B’、’C’、’D’、’E’和’F’。最终输出的结果如下:

defaultdict(, {'A': ['B', 'C'], 'B': ['D'], 'C': ['D'], 'D': ['E'], 'E': ['F']})

五、总结

Python defaultdict是Python中重要的一个数据结构工具,它提供了一种非常高效和易于使用的方法来处理字典为空时出现的关键错误。使用Python defaultdict可以提高代码的可读性,并且具有更好的性能。在实际的编程过程中,可以灵活使用Python defaultdict来提高程序的效率和性能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/21880.html

(0)
上一篇 2024-03-07
下一篇 2024-03-07

相关推荐

  • sql 对表进行聚合查询的方法_MySQL两张表联合查询SQL语句

    sql 对表进行聚合查询的方法_MySQL两张表联合查询SQL语句学习重点 使用聚合函数对表中的列进行计算合计值或者平均值等的汇总操作。 通常,聚合函数会对 NULL 以外的对象进行汇总。但是只有 COUNT 函数例外,使用 COUNT(*) 可以查出包含 NULL

    2023-04-28
    145
  • Python Anchor 简化页面跳转

    Python Anchor 简化页面跳转Python Anchor是一种基于Python的技术,可以用来简化页面跳转。在网页设计中,页面跳转是常见的操作,但是由于存在一些繁琐的问题,一些网站设计者往往会将页面跳转的设计变得复杂。而Python Anchor技术的出现,可以让页面跳转更加简单。

    2024-01-18
    95
  • 测试报告丨DolphinDB与Pandas对于大文本文件处理的性能对比「建议收藏」

    测试报告丨DolphinDB与Pandas对于大文本文件处理的性能对比「建议收藏」Pandas是Python的一个包,最初被作为金融数据分析工具而开发,为时间序列分析提供了很好的支持。 DolphinDB Database 是一款高性能的分布式时序数据库。它集成了功能强大的编程语…

    2023-04-12
    158
  • (3)SQL Server表分区「终于解决」

    (3)SQL Server表分区「终于解决」1.简介 当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度。比如电商平台订单表,库存表,由于长年累月读写较多,积累数

    2023-02-15
    148
  • 开源二三事|ShardingSphere 与 Database Mesh 之间不得不说的那些事「建议收藏」

    开源二三事|ShardingSphere 与 Database Mesh 之间不得不说的那些事「建议收藏」背景 前段时间,以 Apache ShardingSphere 核心团队组建的创业公司 SphereEx,正式对外推出了 Database Mesh 2.0 概念以及与之相配套的开源产品 Pisani

    2023-05-24
    135
  • Python中常量的重要性

    Python中常量的重要性Python是一种面向对象的编程语言,随着其在数据科学和机器学习领域的广泛使用,人们更加关注Python代码的质量。常量是程序中非常重要的组成部分之一,正确使用常量不仅可以提高代码的质量,还可以使其易于维护和升级。

    2024-06-04
    59
  • Mac下Python安装步骤

    Mac下Python安装步骤Python是一门广泛应用于Web开发、数据科学、人工智能等领域的高级编程语言,拥有丰富的标准库和第三方模块。对于Mac用户来说,安装Python非常简单,并且已经预装了Python 2.x版本。但为了跟随最新技术,我们更推荐安装Python最新稳定版或者长期支持版。

    2024-06-19
    46
  • hdfs读写流程_hdfs读写文件的基本原理

    hdfs读写流程_hdfs读写文件的基本原理HDFS采用的是master/slaves这种主从的结构模型管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和Seco

    2023-02-03
    146

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注