当前位置: 首页 > article >正文

Python 字典与集合:从入门到精通的全面解析

Langchain系列文章目录

01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!

python系列文章目录

01-Python 基础语法入门:从变量到输入输出,零基础也能学会!
02-Python 流程控制终极指南:if-else 和 for-while深度解析
03-Python 列表与元组全攻略:从新手到高手的必备指南
04-Python 字典与集合:从入门到精通的全面解析


文章目录

  • Langchain系列文章目录
  • python系列文章目录
  • 前言
  • 一、Python 字典详解
    • 1.1 字典的定义与基本操作
      • 1.1.1 什么是字典?
      • 1.1.2 如何创建字典?
      • 1.1.3 访问字典元素
    • 1.2 字典的常见方法
      • 1.2.1 keys() 方法:获取所有键
      • 1.2.2 values() 方法:获取所有值
      • 1.2.3 items() 方法:获取所有键值对
      • 1.2.4 更新与删除操作
  • 二、Python 集合详解
    • 2.1 集合的定义与基本操作
      • 2.1.1 什么是集合?
      • 2.1.2 如何创建集合?
      • 2.1.3 访问集合元素
    • 2.2 集合的常见操作
      • 2.2.1 添加与删除元素
      • 2.2.2 集合的数学运算
        • 2.2.2.1 交集:共同元素
        • 2.2.2.2 并集:所有元素
        • 2.2.2.3 差集:独有元素
        • 2.2.2.4 对称差集:非共同元素
  • 三、总结


前言

在 Python 编程中,字典(Dictionary) 和 集合(Set) 是两种强大且常用的数据结构。它们不仅能帮助我们高效地管理数据,还能在各种场景中简化代码逻辑。字典以键值对的形式存储数据,适合快速查找和更新;而集合则擅长处理无序、不重复的元素集合,常用于去重和数学运算。
本文将为 Python 初学者 和希望深入掌握这些数据结构的开发者提供一个清晰的学习路径。我们将从字典的定义与基本操作入手,逐步深入到常用方法,再到集合的去重特性和交并差运算。无论你是刚入门的新手,还是想提升技能的进阶开发者,这篇博客都将通过 通俗易懂的语言 和 实用的代码示例,带你全面掌握 Python 字典与集合的精髓。


一、Python 字典详解

字典是 Python 中一种基于 键值对(key-value pair) 的数据结构,能够快速定位和操作数据。本节将从基础定义开始,带你掌握字典的核心操作和方法。

1.1 字典的定义与基本操作

1.1.1 什么是字典?

字典是一种 键值对集合,每个键(key)都映射到一个值(value)。键必须是唯一的,且通常是不可变类型(如字符串、数字或元组),而值可以是任意 Python 对象。
键的唯一性:如果字典中已经有一个键,再次添加相同的键会覆盖原有的值。
应用场景:适合存储结构化数据,比如用户信息、配置项等。
例如,一个人的信息可以用字典表示:

person = {"name": "Alice", "age": 30}

1.1.2 如何创建字典?

创建字典有多种方式,以下是几种常见方法:
使用花括号 {}:

# 创建空字典
empty_dict = {}# 创建带初始值的字典
person = {"name": "Alice", "age": 30, "city": "New York"}

使用 dict() 函数:

person = dict(name="Alice", age=30, city="New York")

从列表转换:

data = [("name", "Alice"), ("age", 30)]
person = dict(data)
print(person)  # 输出: {'name': 'Alice', 'age': 30}

1.1.3 访问字典元素

访问字典中的值主要通过键来实现:
使用方括号 []:

person = {"name": "Alice", "age": 30}
print(person["name"])  # 输出: Alice

注意:如果键不存在,会抛出 KeyError。
使用 get() 方法:

print(person.get("city", "Unknown"))  # 输出: Unknown

优势:可以指定默认值,避免异常。
应用案例:假设我们要从用户信息中获取年龄:

user = {"name": "Bob", "age": 25}
age = user.get("age", 0)  # 如果 age 不存在,返回 0
print(f"用户年龄: {age}")  # 输出: 用户年龄: 25

1.2 字典的常见方法

字典提供了许多内置方法,让操作更加便捷。以下是几个核心方法及其用法。

1.2.1 keys() 方法:获取所有键

keys() 方法返回字典中所有键的视图:

person = {"name": "Alice", "age": 30, "city": "New York"}
keys = person.keys()
print(keys)  # 输出: dict_keys(['name', 'age', 'city'])

应用:常用于循环遍历键:

for key in person.keys():print(key)  # 输出: name, age, city(顺序可能不同)

1.2.2 values() 方法:获取所有值

values() 方法返回字典中所有值的视图:

values = person.values()
print(values)  # 输出: dict_values(['Alice', 30, 'New York'])

应用:统计值或查找特定值:

if "Alice" in person.values():print("Alice 在字典中!")

1.2.3 items() 方法:获取所有键值对

items() 方法返回键值对的视图,每个键值对是一个元组:

items = person.items()
print(items)  # 输出: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])

应用:同时遍历键和值:

for key, value in person.items():print(f"{key}: {value}")
# 输出:
# name: Alice
# age: 30
# city: New York

1.2.4 更新与删除操作

更新元素:

person = {"name": "Alice", "age": 30}
person["age"] = 31  # 更新 age
print(person)  # 输出: {'name': 'Alice', 'age': 31}

删除元素:
使用 del:

del person["age"]
print(person)  # 输出: {'name': 'Alice'}

使用 pop():

age = person.pop("age")  # 删除并返回 age 的值
print(age)     # 输出: 30
print(person)  # 输出: {'name': 'Alice'}

常见问题:如果键不存在,del 会抛出 KeyError,而 pop() 可以指定默认值:

value = person.pop("age", "Not Found")  # 键不存在时返回 "Not Found"

二、Python 集合详解

集合是 Python 中一种 无序且不重复 的数据结构,非常适合去重和数学运算。本节将带你了解集合的基础与进阶用法。

2.1 集合的定义与基本操作

2.1.1 什么是集合?

集合(Set)是一种 无序的元素集合,其中的元素不会重复。集合没有键值对的概念,所有元素都是独立的。
去重特性:自动移除重复元素。
应用场景:去重、成员检测、集合运算。
例如:

numbers = {1, 2, 2, 3}
print(numbers)  # 输出: {1, 2, 3}

2.1.2 如何创建集合?

使用花括号 {}:

fruits = {"apple", "banana", "cherry"}

注意:空集合必须用 set() 创建,因为 {} 表示空字典。
使用 set() 函数:

empty_set = set()  # 创建空集合
numbers = set([1, 2, 2, 3])  # 从列表创建,自动去重
print(numbers)  # 输出: {1, 2, 3}

2.1.3 访问集合元素

集合无序,无法通过索引访问,只能通过循环遍历:

fruits = {"apple", "banana", "cherry"}
for fruit in fruits:print(fruit)
# 输出(顺序不定):
# apple
# banana
# cherry

应用案例:检查元素是否存在:

if "apple" in fruits:print("苹果在集合中!")

2.2 集合的常见操作

集合支持添加、删除元素,以及强大的数学运算。

2.2.1 添加与删除元素

添加元素:
使用 add():

fruits = {"apple", "banana"}
fruits.add("cherry")
print(fruits)  # 输出: {'apple', 'banana', 'cherry'}

使用 update():

fruits.update(["date", "apple"])  # apple 已存在,不重复添加
print(fruits)  # 输出: {'apple', 'banana', 'cherry', 'date'}

删除元素:
使用 remove():

fruits.remove("banana")  # 如果元素不存在,抛出 KeyError
print(fruits)  # 输出: {'apple', 'cherry'}

使用 discard():

fruits.discard("banana")  # 不存在时不报错
print(fruits)  # 输出: {'apple', 'cherry'}

常见问题:如何安全删除元素?推荐用 discard() 避免异常。

2.2.2 集合的数学运算

集合支持交集、并集、差集等运算,方法和运算符均可实现。

2.2.2.1 交集:共同元素
set1 = {1, 2, 3}
set2 = {2, 3, 4}# 方法 1: intersection()
intersection = set1.intersection(set2)
print(intersection)  # 输出: {2, 3}# 方法 2: & 运算符
intersection = set1 & set2
print(intersection)  # 输出: {2, 3}
2.2.2.2 并集:所有元素
# 方法 1: union()
union = set1.union(set2)
print(union)  # 输出: {1, 2, 3, 4}# 方法 2: | 运算符
union = set1 | set2
print(union)  # 输出: {1, 2, 3, 4}
2.2.2.3 差集:独有元素
# 方法 1: difference()
difference = set1.difference(set2)
print(difference)  # 输出: {1}# 方法 2: - 运算符
difference = set1 - set2
print(difference)  # 输出: {1}
2.2.2.4 对称差集:非共同元素
# 方法 1: symmetric_difference()
sym_diff = set1.symmetric_difference(set2)
print(sym_diff)  # 输出: {1, 4}# 方法 2: ^ 运算符
sym_diff = set1 ^ set2
print(sym_diff)  # 输出: {1, 4}

应用案例:找出两组数据的不同点:

old_users = {"Alice", "Bob", "Charlie"}
new_users = {"Bob", "David"}
diff = old_users.symmetric_difference(new_users)
print(diff)  # 输出: {'Alice', 'Charlie', 'David'}

三、总结

通过本文,我们系统地学习了 Python 字典 和 集合 的核心知识:

  • 字典:以键值对存储数据,支持快速访问 (get()) 和遍历 (keys(), values(), items()),适合管理结构化数据。
  • 集合:无序、不重复的元素集合,擅长去重和数学运算(如交集、并集、差集),是处理唯一性数据的利器。

掌握这些数据结构,能显著提升你的编程效率。建议动手实践这些代码示例,在实际项目中灵活运用字典和集合,解锁 Python 的更多可能性!

相关文章:

Python 字典与集合:从入门到精通的全面解析

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

基于coze+微信小程序实现图片上传并利用大模型解析

项目截图&#xff1a; 实现代码&#xff08;直接搬去可用&#xff09; 前提&#xff1a;需要填写你的oss配置coze的api授权配置&#xff01;&#xff01;&#xff01; <template><view class"container"><!-- 高斯模糊背景 --><view class&qu…...

java——执行linux/cmd命令

在Java中执行命令行命令可以通过Runtime.exec()或ProcessBuilder实现。以下是两种方法的详细说明和示例代码&#xff1a; 1. 使用 Runtime.exec() 适用于简单场景&#xff0c;但需手动处理输入/输出流。 try {// 执行命令&#xff08;参数以数组形式传递&#xff0c;避免空格…...

VMware Fusion 虚拟机Mac版 安装CentOS 7 系统

介绍 CentOS是Community Enterprise Operating System的缩写&#xff0c;也叫做社区企业操作系统。是企业Linux发行版领头羊Red Hat Enterprise Linux的再编译版本&#xff08;是一个再发行版本&#xff09;&#xff0c;而且在RHEL的基础上修正了不少已知的 Bug &#xff0c;相…...

java练习(44)

ps:题目来自力扣 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 // 定义链表节点类&#xff0c;每个节…...

Deepseek 开源周第一天:FlashMLA

Deepseek 隆重开启开源周!第一天我们迎来了FlashMLA。我很高兴带大家了解这项创新,揭秘 FlashMLA 为何能成为 AI 和 GPU 优化领域的变革者。 Deepseek 开源周的热门话题有哪些?...

DeepSeek-OpenSourceWeek-第三天-Release of DeepGEMM

DeepGEMM:这是一款专为高效的 FP8(8 位浮点)通用矩阵乘法(GEMMs)而开发的尖端库。GEMMs 是许多 AI 工作负载(尤其是深度学习)中的基本操作。 特点: 支持稠密和 MoE GEMMs:它可以处理标准的稠密矩阵乘法以及混合专家(MoE)模型中使用的矩阵乘法。MoE 是一种神经网络架…...

Bitlocker取证之PXE降级取密钥

支持到微软Surface pro系列。...

【补阙拾遗】排序之冒泡、插入、选择排序

炉烟爇尽寒灰重&#xff0c;剔出真金一寸明 冒泡排序1. 轻量化情境导入 &#x1f30c;2. 边界明确的目标声明 &#x1f3af;3. 模块化知识呈现 &#x1f9e9;&#x1f4ca; 双循环结构对比表★★★⚠️ 代码关键点注释 4. 嵌入式应用示范 &#x1f6e0;️5. 敏捷化巩固反馈 ✅ …...

跨AWS账户共享SQS队列以实现消息传递

在现代分布式系统中,不同的服务和组件通常需要进行通信和协作。Amazon Simple Queue Service (SQS)提供了一种可靠、可扩展且完全托管的消息队列服务,可以帮助您构建分布式应用程序。本文将介绍如何在一个AWS账户(账户A)中创建SQS队列,并授权另一个AWS账户(账户B)中的用户和角色…...

基于Python实现的【机器学习】小项目教程案例

以下是一个基于Python实现的【机器学习】小项目教程案例,结合的经典案例与最佳实践,涵盖数据预处理、模型训练与评估全流程,并附详细代码说明与结果分析: 案例1:鸢尾花分类(SVM算法) 数据集:Iris Dataset(含150个样本,4个特征,3个类别) 目标:根据花瓣与萼片长度…...

TDengine 中的数据库

数据库概念 时序数据库 TDengine 中数据库概念&#xff0c;等同于关系型数据库 MYSQL PostgreSQL 中的数据库&#xff0c;都是对资源进行分割管理的单位。 TDengine 数据库与关系型数据库最大区别是跨库操作&#xff0c;TDengine 数据库跨库操作除了少量几个SQL 能支持外&…...

.Net Core Visual Studio NuGet.Config 配置参考

Visual Studio 2022 NUGET NU1301 无法加载源 基础连接已关闭&#xff1a;无法建立SSL / TLS安全通道的信任关系&#xff1b;根据验证过程&#xff0c;远程证书无效&#xff0c;参考文章&#xff1a;https://blog.csdn.net/hefeng_aspnet/article/details/145780081 NuGet 行为…...

深入剖析 OpenCV:全面掌握基础操作、图像处理算法与特征匹配

深入剖析 OpenCV&#xff1a;全面掌握基础操作、图像处理算法与特征匹配 一、引言二、OpenCV 的安装&#xff08;一&#xff09;使用 pip 安装&#xff08;二&#xff09;使用 Anaconda 安装 三、OpenCV 基础操作&#xff08;一&#xff09;图像的读取、显示与保存&#xff08;…...

帧率和带宽

帧率&#xff0c;通常指的是每秒传输的帧数&#xff0c;帧就是一段数据包。 带宽则是指在单位时间内可以传输的数据量&#xff0c;通常以比特每秒来衡量 帧率在ROS2中可能指的是每秒发布的消息数量。也就是说&#xff0c;一个节点发布话题的频率。比如&#xff0c;每秒发布10次…...

Immich自托管服务的本地化部署与随时随地安全便捷在线访问数据

文章目录 前言1.关于Immich2.安装Docker3.本地部署Immich4.Immich体验5.安装cpolar内网穿透6.创建远程链接公网地址7.使用固定公网地址远程访问 前言 小伙伴们&#xff0c;你们好呀&#xff01;今天要给大家揭秘一个超炫的技能——如何把自家电脑变成私人云相册&#xff0c;并…...

20250212:ZLKMedia 推流

1:资料 快速开始 ZLMediaKit/ZLMediaKit Wiki GitHub GitHub - ZLMediaKit/ZLMediaKit: WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C++11 文档里面提供了各个系…...

IDEA中.gitignore未忽略指定文件的问题排查与解决

IDEA 中.gitignore 未忽略.env 文件的问题排查与解决 在使用 IntelliJ IDEA 进行项目开发时,合理利用.gitignore文件来管理版本控制是非常重要的。它能帮助我们排除一些不需要纳入版本管理的文件,比如包含敏感信息的.env文件。然而,有时我们会遇到一种情况:明明已经将.env…...

Apache-iotdb 基本概念

问题背景 定义&#xff08;写得太好了&#xff01;&#xff09; root 是整个树状结构的父节点&#xff0c; CirroData-TimeS 有存储组、设备、测点等概念&#xff0c;数据在存储的时候&#xff0c;不同的存储组的数据是存储在不同的文件夹中的。上图中有 root.sgcc、root.ln两…...

CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?

前言&#xff1a;这里只说js用的CryptoJS库里的相关内容&#xff0c;只用js来进行代码操作和讲解。 这里网上相关的帖子很少&#xff0c;不得已问了很长时间AI 想引用CryptoJS库情况分两种&#xff0c;一种是html引用&#xff0c;另一种是在Nodejs里引用。 一、引用CryptoJS库…...

Java 面试题 20250227

Java 中序列化与反序列化是什么&#xff1f; 序列化&#xff1a;将 Java 对象转化成可传输的字节序列格式&#xff08;字节流、JSON、XML&#xff09;&#xff0c;以便于传输和存储。 反序列化&#xff1a;将字节序列格式数据转化成 Java 对象的过程。 1、为什么需要序列化和…...

springboot浅析

springboot浅析 什么是springboot&#xff1f; 实际上springboot就是一个给我们提供了快速搭建使用spring的一种方式&#xff0c;让我们省去了繁琐的xml配置。 为什么无需进行大量的xml配置&#xff0c;就是因为springboot是基于约定优于配置的思想&#xff0c;简单来说就是遵循…...

【文件基础操作】小笔记

Step1: 现在项目文件夹&#xff08;我的项目叫做RunPony&#xff09;下创建一个a.txt文本文件&#xff0c;手动写入一些数字&#xff0c;保存 Step2: 现在在main.c内写一个基本的文件处理的程序 Step3: 现在已经知道如何打开关闭文件&#xff0c;下一步要搞懂如何读取txt内的…...

SSL 证书是 SSL 协议实现安全通信的必要组成部分

SSL证书和SSL/TLS协议有着密切的关系&#xff0c;但它们本质上是不同的概念。下面是两者的区别和它们之间的关系的表格&#xff1a; 属性SSL/TLS 协议SSL证书英文全称SSL&#xff08;Secure Sockets Layer&#xff09;&#xff0c;TLS&#xff08;Transport Layer Security&am…...

AI问答-供应链管理:排队模型M/D/5/100/m/FCFS代表的含义是什么

在供应链管理中&#xff0c;排队模型M/D/5/100/m/FCFS代表的含义如下&#xff1a; M&#xff1a; 表示顾客到达时间间隔服从负指数分布&#xff08;Markov&#xff0c;负指数分布具有无记忆性&#xff09;&#xff0c;即顾客到达是随机的&#xff0c;且到达时间间隔服从指数分…...

迁移学习策略全景解析:从理论到产业落地的技术跃迁

&#xff08;2025年最新技术实践指南&#xff09; 一、迁移学习的范式革命与核心价值 在人工智能进入"大模型时代"的今天&#xff0c;迁移学习已成为突破数据瓶颈、降低训练成本的关键技术。本文基于2025年最新技术进展&#xff0c;系统梳理六大核心策略及其在产业实…...

Linux驱动学习(四)--字符设备注册

上一节讲到的字符设备注册与销毁是通过cdev_init、cdev_add、cdev_del等函数分步执行的&#xff0c;本小节用一种更简单的方式&#xff0c;来注册字符设备 register_chrdev 如果major为0&#xff0c;该函数将动态的分配一个主设备号并且返回对应的值如果major > 0&#xff…...

30天开发操作系统 第24天 -- 窗口操作

一、窗口切换 1.0 前天开始我们的应用程序可以显示自己的窗口了&#xff0c;现在画面上到处都是窗口&#xff0c;我们急需能够 切换窗口顺序的功能&#xff0c;使得在需要的时候可以查 看最下面的窗口的内容。这个功能看起来不难&#xff0c;我们马上来实现它。 不过&#xf…...

Visual Studio 中 C/C++ 函数不安全警告(C4996)终极解决方案:分场景实战指南

问题描述 在 Visual Studio 中编写 C/C 代码时&#xff0c;使用 scanf、strcpy、fopen 等传统函数会触发以下警告&#xff1a; C4996: xxx: This function or variable may be unsafe. Consider using xxx_s instead. 根本原因&#xff1a; 这些函数缺乏缓冲区溢出检查&#…...

【Go】十八、http 调用服务的编写

http接口框架的搭建 这个http接口框架的搭建参考之前的全量搭建&#xff0c;这里是快速搭建的模式&#xff1a; 直接对已有的http模块进行复制修改&#xff0c;主要修改点在于 proto部分与api、router 部分&#xff0c;剩余的要针对进行修改模块名称。 接口的具体编写 在 a…...