Python的集合模块,使用数据容器处理数据集合

大家好,Python是一种功能强大的编程语言,可以简化许多编程任务。它的标准库中有一个collections模块,提供了处理集合数据的有用容器数据类型。

ChainMap类将多个字典合并为一个映射。Counter类用于计算列表或其他可迭代对象中元素的出现次数。OrderedDict类保持其键的插入顺序,还可以使用UserDictUserListUserString类创建常见数据类型的自定义版本。defaultdict类允许为字典中不存在的任何键指定默认值。

deque类是一种双端队列,可以从两端追加和弹出元素。namedtuple类创建具有命名字段的元组子类,使得处理复杂的数据结构更加容易。使用这些来自collections模块的类可以简化和优化代码。

1.ChainMap:合并多个字典

ChainMap类允许将多个字典合并为一个映射,当用户希望像处理单个实体一样搜索多个字典时,这非常有用。接下来看一下它是如何工作的:

from collections import ChainMapdict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
combined_dict = ChainMap(dict1, dict2)print(combined_dict['a'])  # 输出:1 (from dict1)
print(combined_dict['b'])  # 输出:2 (from dict1)
print(combined_dict['c'])  # 输出:4 (from dict2)

2.Counter:计数可散列对象

Counter类是一种高效计数可散列对象的方法,提供了一种清晰简洁的方式来统计项目。以下是一个简单的示例:

from collections import Counterdata = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
counter = Counter(data)print(counter)  # 输出:Counter({4: 4, 3: 3, 2: 2, 1: 1})

3.OrderedDict:保持元素顺序

OrderedDict类会记住项目插入的顺序,在元素顺序很重要的情况下,这一点至关重要。查看以下的示例:

from collections import OrderedDictordered_dict = OrderedDict()
ordered_dict['b'] = 2
ordered_dict['c'] = 3
ordered_dict['a'] = 1print(list(ordered_dict.keys()))  # 输出:['b', 'c', 'a']

4.UserDict、UserList、UserString:创建自定义容器

UserDictUserListUserString类提供了创建自定义字典类、列表类和字符串类对象的简便方法,可以从这些类继承,并根据需要自定义其行为。

from collections import UserDict, UserList, UserStringclass MyDictionary(UserDict):def __missing__(self, key):return f"Key '{key}' not found"my_dict = MyDictionary({'a': 1, 'b': 2})
print(my_dict['c'])  # 输出:Key 'c' not found

在这个示例中,本文定义了__missing__方法,如果不存在需要寻找的键,则返回一个指示未找到键的字符串,而不是像传统字典那样引发KeyError异常。

5.defaultdict:为缺失的键设置默认值

defaultdict类是内置字典类的一个子类。它会自动为缺失的键提供默认值,从而防止KeyError异常。下面是一个示例:

from collections import defaultdictfruit_count = defaultdict(int)
fruit_count['apple'] += 1print(fruit_count['apple'])  # 输出:1
print(fruit_count['banana'])  # 输出:0 (default value for int)

6.deque:双端队列

deque类实现了双端队列,对于从两端高效地追加和弹出元素非常有用,它特别适用于实现队列和堆栈。

from collections import dequequeue = deque()
queue.append(1)
queue.append(2)
queue.append(3)
queue.append(4)
queue.append(5)print(queue.popleft())  # 输出:1
print(queue.popleft())  # 输出:2
print(queue.pop())  # 输出:5
print(queue) # 输出:deque([3, 4])

7.namedtuple:命名元组以提高可读性

namedtuple类创建了一种新类型的元组,可以使用命名属性访问其中的字段。这不仅提高了清晰度,还减少了由于索引不匹配而导致出错的几率。

from collections import namedtuplePerson = namedtuple('Person', ['name', 'age', 'gender'])
person = Person('Alice', 30, 'female')print(person) # 输出:Person(name='Alice', age=30, gender='female')

综上所述,Python的collections模块是开发人员处理数据集合时的有用工具,它提供了各种类,可以帮助完成合并字典、计数项和保持数据顺序等任务。通过使用这些类,可以使编码过程更加高效。此外,collections模块还允许创建自定义容器,并使用特殊的数据结构,如dequenamedtuple。这些结构可以进一步增强编程能力,并帮助开发者轻松解决复杂的问题。

选择正确的类对于任务非常重要,因为这可以简化甚至最复杂的编码挑战。通过使用collections模块,可以灵活选择适合工作的正确工具,并使编码过程更加高效。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/187021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

距离向量路由协议——RIP

目录 动态路由动态路由简介为什么需要动态路由动态路由基本原理路由协议的分类 距离向量路由协议RIPv1RIP简介RIPv1的主要特征RIPv1的基本配置RIPv1配置案例被动接口单播更新使用子网地址 RIPv2RIPv2的基本配置RIPv2配置案例 RIPv2的高级配置与RIPv1的兼容性手工路由汇总触发更…

第四十一篇,一次matlab与spdlog的合作

做了一次matlab解析spdlog日志文件并动态绘制行车轨迹的尝试,大获成功。 spdlog的存储,数据头有固定格式如下: 日志类型一个字符空格[日期时间]空格[日志内容tag]空格日志内容 有了固定的格式,做解析就好办了。 (日…

快速了解ChatGPT(大语言模型)

目录 GPT原理:文字接龙,输入一个字,后面会接最有可能出现的文字。 GPT4 学会提问:发挥语言模型的最大能力 参考李宏毅老师的课快速了解大语言模型做的笔记: Lee老师幽默的开场: GPT:chat Ge…

高等数学积分关系定理(格林公式、高斯公式、斯托克斯公式)的理解

1 格林公式、高斯公式、斯托克斯公式 1.1 格林公式(Green formula) 1.1.1 格林公式例题 1.2 高斯公式(Gauss formula) 1.2.1 高斯公式例题1 1.2.2 高斯公式例题2 1.3 斯托克斯公式(Stokes formula) 1.3.1 …

Git修改远程仓库名称

1、先直接在远程点仓库名,然后左侧菜单栏找settings-general,然后直接修改工程名,保存即可。 2、还是在settings-general下,下拉找到Advanced点击Expand展开,然后下拉到最底部 在Change path里填入新的项目名称&#x…

GCN01——Ubuntu中设置vivado编辑器为vscode

确定vscode位置 在命令行中输入 which code得到文件地址 进入文件夹后可看到,这是个链接文件,不过无所谓,就用这个地址就行 设置Text Editor 打开setting选择右侧text editor 这里说明了如何进行设置 将自己的地址加进去就行 /usr/share…

Echarts 设置数据条颜色 宽度

设置数据条颜色(推荐) let yData [{value: 500,time: 2012-11-12,itemStyle: //设置数据条颜色{normal: { color: red }}},{value: 454,time: 2020-5-17},{value: 544,time: 2022-1-22},{value: 877,time: 2013-1-30}, {value: 877,time: 2012-11-12}]…

亚马逊云科技:探索未来云计算之窗

云计算技术已经成为现代科技领域中至关重要的一个环节,它为各种行业提供了高效、灵活、可扩展的计算和数据存储解决方案。而在这个领域中,亚马逊云科技(Amazon Web Services,AWS)以其卓越的技术创新和广泛的云服务覆盖…

近期知识点随笔

菜单查询(编写权限时的细节) 菜单查询list为了侧边框展示更完整(不报空指针) 登录时(用户名)查询出多个结果(保证用户名唯一) 文件上传 前端 对权限与菜单绑定的修改(实…

opencv读取二进制灰度图并显示

#include <iostream> #include <fstream> #include <vector> #include <stdint.h>#include <opencv2/opencv.hpp> // 包含OpenCV头文件using namespace std;// 注意&#xff1a;确保这些值与Python脚本中生成数据的值匹配。 const int WIDTH 19…

(三)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB代码)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

ClassPathScanningCandidateComponentProvider

ClassPathScanningCandidateComponentProvider ClassPathScanningCandidateComponentProvider是Spring框架中的一个类&#xff0c;用于扫描classpath下指定包名中的类&#xff0c;并将其转换为Spring的BeanDefinition对象。 使用ClassPathScanningCandidateComponentProvider…

基本数据类型与引用数据类型的区别(java基础)

目录 &#x1f35f; 八大基本数据类型&#x1f35f; 引用数据类型&#x1f35f; 值传递&#x1f367;传递基本数据类型时&#xff0c;传递的是真实的数据&#xff0c;形参的改变&#xff0c;不影响实际参数的值&#x1f367;传递引用数据类型时&#xff0c;传递的是地址值&…

Win Server 2019远程桌面服务部署

一、添加远程桌面授权服务 服务器管理 - 添加角色和功能打开“添加角色和功能向导”窗口&#xff0c;选择基于角色或给予功能安装&#xff1a; 打开服务器管理&#xff0c;打开角色和功能&#xff0c;添加远程回话主机和远程桌面授权 image.png 以上配置完成后使用期限为120…

月度产品更新(11月):数据同步功能上线,配置更简单

为了满足用户不断增长的需求&#xff0c;我们持续努力提升产品的功能和性能&#xff0c;以更好地支持用户的工作。 数环通11月的最新产品更新已经正式发布&#xff0c;带来了一系列强大的功能&#xff0c;以提升您的工作效率和系统的可靠性。 更新快速预览 新增&优化功能&a…

【开源】基于Vue.js的超市账单管理系统的设计和实现

项目编号&#xff1a; S 032 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S032&#xff0c;文末获取源码。} 项目编号&#xff1a;S032&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

java springboot通过application配置文件生成随机值并控制范围

我们找到 项目的 application 配置文件 这里我们还是习惯用 yml格式的 我们在配置文件中 写出 ${random.} 的时候 他就会将所有可配置的随机类型都提示出来了 有 整数 长整星 字符串 uuid 这里 我们来个模板 testcase:book:id: ${random.int}name: ${random.value}date: ${r…

时序预测 | Python实现TCN时间卷积神经网络价格预测

时序预测 | Python实现TCN时间卷积神经网络时间序列预测 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 时间卷积网络,TCN。 利用CNN技术处理时间序列数据。 卷基础层有三种,第一种是一维CNN,用于输…

C语言每日一题(42)删除链表的倒数第N个结点

力扣网 19 删除链表的倒数第N个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;head …

1657.确定两个字符串是否接近

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;1657. 确定两个字符串是否接近 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 当一个字符串中出现的字符全部在另一个字符串中出现并且 两字符串各字符出现次数排序后的 有序序列相同 时&a…