【Python零基础学习】字典

文章目录

  • 前言
  • 一、简单字典示例
  • 二、使用字典
  • 三、字典遍历
  • 四、嵌套
  • 总结


前言

Python 字典 是一种非常强大且灵活的数据结构,它允许你通过键(key)来存储和检索值(value)。想象一下,字典就像一个巨大的电话簿,其中每个电话号码都有一个对应的名字。在这个电话簿里,你可以通过名字(键)快速找到对应的电话号码(值)。
字典中的每个元素都由一对键值对组成,键必须是唯一的,而且通常是不可变的数据类型,如字符串或数字。值则可以是任意类型的数据,甚至可以是另一个字典或列表。这种灵活性使得字典成为处理各种复杂数据的理想选择。
与列表不同,字典是无序的,这意味着元素不会按照插入的顺序排列。这使得字典非常适合用来表示现实生活中的映射关系,例如:

  • 电话簿:姓名作为键,电话号码作为值。
  • 词汇表:单词作为键,定义作为值。
  • 配置文件:配置项名称作为键,配置值作为值。

字典的一个重要特点是基于键的快速查找机制。无论字典中有多少个元素,查找时间几乎都是固定的,这使得字典在处理大量数据时非常高效。
举个例子,假设你正在开发一个游戏,需要记录玩家的分数。你可以使用字典来存储每个玩家的分数,其中玩家的名字作为键,分数作为值。这样,你就可以轻松地通过玩家的名字查询他们的分数,或者更新他们的分数。
总之,Python 字典是一种非常实用的数据结构,它不仅能够高效地存储和检索数据,还能够帮助你轻松地管理复杂的数据关系。无论是处理简单的数据还是构建复杂的程序,字典都是非常有价值的工具。


一、简单字典示例

dictionary = {'name': 'John', 'age': 30, 'city': 'New York'}print(dictionary["name"])

在这里插入图片描述

类似于java的Map,原理是一致的,操作方式不同罢了。


二、使用字典

Python字典是一种高效的数据结构,用于存储无序的键值对集合。每个键(key)必须是唯一的且不可变的,而值(value)则可以是任意类型的数据,包括数字、字符串、列表、甚至其他字典。字典通过键来快速访问、添加、修改或删除值,适用于需要频繁查找和更新数据的场景。字典的创建和操作非常灵活,支持多种内置方法,如 get(), keys(), values(), items() 等,便于数据的管理和操作。字典在Python编程中广泛应用于数据存储、配置管理、缓存等多种场景,是处理复杂数据关系的强大工具。

访问字典中的值

# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}# 使用键访问值
name = my_dict['name']
age = my_dict['age']
city = my_dict['city']print(f"Name: {name}")  # 输出: Name: Alice
print(f"Age: {age}")    # 输出: Age: 25
print(f"City: {city}")  # 输出: City: New York

在这里插入图片描述

这里是访问字典中某个键关联的值的一种最简单方式,即指定字典名并且把键放在后面的方括号内。

添加键值对

字典是动态结构,可以添加键值对,格式为 字典名[‘键’] = 值

# 创建一个字典
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}# 添加一个新的键值对
my_dict['email'] = 'alice@example.com'# 打印字典以查看更新后的内容
print(my_dict)

在这里插入图片描述

Python在3.7版本以后开启了插入顺序的保证,即遍历时的顺序和插入时的顺序一致。

使用空字典

当我们需要使用字典来存储用户提供的数据或者编写能自动生成大量键值对的代码,通常需要先定义一个空字典。

my_dict = {}my_dict['name'] = 'John'my_dict['age'] = 30my_dict['city'] = 'New York'print(my_dict)

在这里插入图片描述

修改字典中的值

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}print(f"原来的字典值为:{my_dict}")my_dict['name'] = 'Jane'my_dict['age'] = my_dict['age'] + 9print(f"修改后的字典值为:{my_dict}")

先是创建了一个字典,接着修改了name和age对应的值,打印结果如下

在这里插入图片描述

删除键值对

Python字典中不需要的信息,可以使用del语句把对应的键值对彻底删除

my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}print(my_dict)del my_dict['age']print(my_dict)

以上代码删除了键为age的字典值
在这里插入图片描述

类似的对象组成的字典

favorite_languages = {'jen': 'python','sarah': 'c++','edward': 'ruby','phil': 'python',
}language = favorite_languages['sarah'].title()print(f"Sarah's favorite language is {language}.")

代码中设置了一个字典,关于每个人最喜欢的编程语言,值可以相同

在这里插入图片描述

使用get()来访问值

前面已经说了一种使用放在方括号内的键从字典中获取感兴趣的值,但可能会引发问题:指定的键不存在就会出错。

favorite_languages = {'jen': 'python','sarah': 'c++','edward': 'ruby','phil': 'python',
}language = favorite_languages['jack']print(f"Sarah's favorite language is {language}.")

在这里插入图片描述
字典中根本就不存在 jack这个键,直接报错了,我们使用get()方法获取

favorite_languages = {'jen': 'python','sarah': 'c++','edward': 'ruby','phil': 'python',
}language = favorite_languages.get('jack', 'Not found')print(f"Sarah's favorite language is {language}.")

在这里插入图片描述

get()方法有两个参数,第一个用于指定键,必不可少,第二个参数用于当指定的键不存在时返回的值,可选。

如果不写默认返回值:

language = favorite_languages.get('jack')

那么这个返回的结果就是 None ,表示不存在,非错误。


三、字典遍历

Python字典复杂的可以存储上百万个键值对,这就需要字典支持遍历,Python字典既可以支持遍历所有键值对,也可以单独支持遍历键或者值。

遍历所有键值对

# 定义一个包含较多数据的简单字典
data_dict = {"name": "Alice","age": 30,"city": "New York","email": "alice@example.com","phone": "+1234567890","job_title": "Software Engineer","company": "TechCorp","years_of_experience": 5,"is_student": False
}# 打印字典中的所有键值对
for key, value in data_dict.items():print(f"{key}: {value}")

可以看到遍历字典,使用到了for循环,第一部分是两个变量,表示键和值,名称随意。第二部分是字典名调用方法items(),这部分是返回一个键值对列表。

在这里插入图片描述

遍历所有键

不需要值时,我们使用keys()方法遍历所有键,有时会很有效。

字典部分还是使用上述代码,for循环遍历键的使用示例如下

# 打印字典中的所有键值对
for key in data_dict.keys():print(key)

在这里插入图片描述

注意keys()方法返回的是一个列表,我们可以使用列表的 innot in 方法来判断键是否存在。

# 定义一个包含较多数据的简单字典
data_dict = {"name": "Alice","age": 30,"city": "New York","email": "alice@example.com",
}key = "phone"if key in data_dict:print(f"The phone number of {data_dict['name']} is {data_dict[key]}")
else:print(f"The key {key} is not in the dictionary")key = "email"
if key in data_dict:print(f"The email address of {data_dict['name']} is {data_dict[key]}")
else:print(f"The key {key} is not in the dictionary")

在这里插入图片描述

按特定顺序遍历所有键

Python中提供了 sorted() 函数来获得特定顺序排列的键列表的副本

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',
}
for name in sorted(favorite_languages.keys()):print(f"{name.title()}, thank you for taking the poll.")

在这里插入图片描述

遍历字典中的所有值

Python中使用 values() 方法遍历字典的所有值

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',
}for language in favorite_languages.values():print(language.title())

在这里插入图片描述

若获取的值当中有重复的怎么办?别着急,Python为我们提供了 set() 方法,把值列表传进去即可

favorite_languages = {'jen': 'python','sarah': 'c','edward': 'ruby','phil': 'python',
}for language in set(favorite_languages.values()):print(language.title())

Python被去重了

在这里插入图片描述

集合简述

在 Python 中,集合(set)是一种内置数据类型,用于存储唯一且无序的元素集合。集合中的每个元素都是唯一的(不允许重复),并且集合本身是可变的,这意味着你可以添加或删除元素,但不能改变单个元素。

创建集合的方式:使用{}

  my_set = {1, 2, 3}

注意:my_set = {} 创建的不是一个空集合,而是一个空字典。创建空集合,需要使用set(), my_set = set()

languages = {'python', 'rust', 'python', 'c'}print(languages)

在这里插入图片描述


四、嵌套

有时候,需要把多个字典存储在列表中或将列表作为值存储在字典中,这称之为嵌套。可以在列表中嵌套字典,也可以在字典中嵌套列表,甚至在字典中嵌套字典。这是复杂的数据结构,其他语言也是一样。

列表中存储字典

dict_0 = {'name': 'John','age': 25,'city': 'New York','country': 'USA'
}dict_1 = {'name': 'Jane','age': 30,'city': 'Los Angeles','country': 'USA'}dict_2 = {'name': 'Bob','age': 40,'city': 'Chicago',}people = [dict_0, dict_1, dict_2]for person in people:print(person)

这是一段简单的代码,定义了三个字典,然后把三个字典添加到列表中,最后for循环打印

在这里插入图片描述

字典中存储列表

dict = {'name': 'John','age': 25,'city': 'New York','country': 'USA','hobbies': ['reading', 'swimming', 'hiking']
}
for hobby in dict['hobbies']:print(hobby)

dict字典中有一个键 hobbies,关联的值为爱好列表

在这里插入图片描述

字典中存储字典

字典中可以嵌套字典,但是代码结构会变得复杂,而且字典元素可以有不同的键值

# 创建一个嵌套字典来存储员工的信息
employee_info = {'employee1': {'name': 'Alice','age': 30,'department': 'Engineering'},'employee2': {'name': 'Bob','age': 25,'department': 'Sales','salary': 50000},'employee3': {'name': 'Charlie','age': 35,'department': 'Marketing'}
}print(employee_info)

总结

本篇文章介绍了字典这种数据结构的用法,以及字典和列表的、字典和字典的相互嵌套。实际当中要注意嵌套层级的深度。本文依然是比较基础的内容,但代码示例中展示的用法需要多动手练习,才能熟练掌握。

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

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

相关文章

8月21日微语报,星期三,农历七月

8月21日微语报,星期三,农历七月十八,工作愉快,生活喜乐! 一份微语报,众览天下事! 1、今日出发!中国体育代表团将分两批出征巴黎残奥会。 2、股价再创新高!工商银行市值…

suricata编译安装和运行

目录 编译安装 运行 调试 编译安装 apt -y install autoconf automake build-essential cargo \ libjansson-dev libpcap-dev libpcre2-dev libtool \ libyaml-dev make pkg-config rustc zlib1g-dev apt-get install libpcre3-dev wget https://www.openin…

项目实战--SpringBoot整合EasyExcel实现数据导入导出

SpringBoot整合EasyExcel实现数据导入导出 一、前言二、实践2.1 实体类注解方式2.2 动态参数化导出导入 一、前言 在公司业务系统开发过程中,操作 Excel 实现数据的导入导出是个非常常见的需求。 最近公司的项目采用EasyPoi来实现的,但是在数据量大的情…

GPT-SoVITS

文章目录 model archS1 ModelS2 model model arch S1 model: AR model–ssl tokensS2 model: VITS,ssl 已经是mel 长度线性相关,MRTE(ssl_codes_embs, text, global_mel_emb)模块,将文本加强相关,学到一个参考结果 S1 Model cla…

Linux进程间通信——SystemV消息队列与信号量

文章目录 消息队列信号量同步互斥原语、原子性信号量多线程并发访问锁 消息队列 SystemV除了共享内存之外,还有一个进程间通信的方式,是消息队列 我们说一切进程间通信的方式本质其实就是让不同进程看到同一份资源 这个消息队列的本质其实就是让两个进…

十二步:像玩游戏一样搞量化,量化交易不是“黑神话”

十二步:像玩游戏一样搞量化,量化交易不是“黑神话” 1、定义您的目标2、数据收集和清理3、构思4、模型开发5、回测6、风险管理7、交易成本分析 (TCA)8、模拟交易9、优化10、执行11、监控和维护12、记录和审查结论 《黑神话:悟空》今日上线了&…

OSPF-基础多区域实验

1.ENSP下载 阿里云盘分享 ⭐/*无需密钥 免费下载 安装不成功,可关注并私信博主*/ 2.OSPF的基础需求和规则 实验规则: 1.接口地址→XY.XY.XY.R /24 X:两者之间最小的 Y:两者之间最大的 R:谁的接口就是谁的编号 以R1和R2之间的连接为例&#xff0…

高性能 Web 服务器:让网页瞬间绽放的魔法引擎(中)

目录 一.Nginx版本和安装方式:源码编译安装 1.验证版本及编译参数 2.使用安装完成的二进制文件nginx 3.Nginx 启动文件 二.平滑升级和回滚 三.全局配置 实现 nginx 的高并发配置 四.核心配置:新建一个 PC web 站点 五.核心配置:location的详细使用…

GlobalMapper-大疆的航点kmz转航线文件展示空间轨迹

0序: 在大疆遥控器或者司空2中设置航线,都是一个个的航点,如果把航点转为航线,在三维地球中显示其空间效果。用于分析和实际物体的距离,或者展示该航线都做了哪些方面的考虑。 如何把一堆点连城一条线? 本…

Kali Linux 命令大全

一、引言 Kali Linux 作为一款专为渗透测试和安全研究设计的操作系统,拥有丰富的命令行工具,熟练掌握这些命令对于高效地进行安全测试和分析至关重要。本文将为您详细介绍 Kali Linux 中常用的命令,涵盖系统信息获取、文件操作、网络分析、用…

如何轻松有效地将 Windows 10 电脑迁移到 SSD

您想将 Windows 10 迁移到新硬盘驱动器吗?在专业第三方应用程序的帮助下,它可以简单有效地完成。这篇文章将为读者提供有关如何将 Windows 10 迁移到 SSD 的详细指南。 Windows 10 电脑系统迁移到 SSD 的四个原因 Windows 10 克隆到 SSD 意味着将设备上…

【C++】————智能指针

作者主页: 作者主页 本篇博客专栏:C 创作时间 :2024年8月20日 一,什么是智能指针 在C中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针&…

标准版v5.4安卓手机小程序扫码核销读取不到核销码的问题

修改这个文件,红色的那块代码替换成绿色的这段代码,然后重新打包上传。 文件地址:template/uni-app/pages/admin/order_cancellation/index.vue let path decodeURIComponent(res.path); self.verify_code path.split(‘code’)[1]; h5…

使用Element UI组件时,icon图标不显示

问题描述: 我在使用Element UI组件的日期选择器时,发现图标不显示(左边是原图,右边的问题图)。 经过检查我发现,我的JS,CSS文件都没有问题,只是缺少了element-icons.tff和element-icons.woff这两个文件。 …

C语言之“ 数组 ”

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C语言基础 目录 前言 一、数组 二、一维数组 2.1 一维数组的创建和初始化 数组创建 数组初始化 数组类型 2.2 一维数组的使用 数组下标 数组打印 数组输…

SIRA-PCR: Sim-to-Real Adaptation for 3D Point Cloud Registration 论文解读

目录 一、导言 二、 相关工作 1、三维点云配准工作 2、无监督域适应 三、SIRA-PCR 1、FlyingShape数据集 2、Sim-to-real自适应方法 3、配准 4、损失函数 一、导言 该论文来自于ICCV2023,论文提出了一种新的方法SIRA-PCR,通过利用合成数据Flying…

Java面试--框架--Spring MVC

Spring MVC 目录 Spring MVC1.spring mvc简介2.spring mvc实现原理2.1核心组件2.2工作流程 3.RESTful 风格4.Cookie,Session4.1 会话4.2 保存会话的两种技术 5.拦截器5.1过滤器、监听器、拦截器的对比5.2 过滤器的实现5.3 拦截器基本概念5.4 拦截器的实现 1.spring …

Ropdump:针对二进制可执行文件的安全检测工具

关于Ropdump Ropdump是一款针对二进制可执行文件的安全检测工具,该工具基于纯Python开发,是一个命令行工具,旨在帮助广大研究人员检测和分析二进制可执行文件中潜在的ROP小工具、缓冲区溢出漏洞和内存泄漏等安全问题。 功能介绍 1、识别二进…

使用gpreftools测试性能

参考文献: C 性能分析工具调研_性能分析工具 gperf perf vergi 比较-CSDN博客性能测试工具CPU profiler(gperftools)的使用心得-CSDN博客gperftools使用方法和常见问题_pprof no nodes to print-CSDN博客c 分析 gperftools 总结 | Weakyon Blog 文章目录 安装使用 …

第2章-01-网站中的资源介绍

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年CSDN全站百大博主。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:Web爬虫入门与实战精讲。 🎉欢迎 👍点赞✍评论⭐收…