【python百炼成魔】python之字典详解

news2024/11/17 21:23:10

前言

今天我们一起来探讨python的另外一种类型: 字典,如果你没有看过列表和元组,建议先学习列表和元组。

【python百炼成魔】python之元组详解

【python百炼成魔】python之列表详解

在这里插入图片描述

文章目录

  • 前言
  • 字典的概念
  • 语法格式及字典的创建
  • 字典的日常操作
    • 1. 获取字典的值
    • 2. 获取字典视图的三个方法
    • 3. 增加元素,修改元素,删除元素
    • 4. 字典的遍历
    • 5. 字典的常用方法
  • 总结

字典的概念

我们在前面的章节中已经学习了列表与元组,这两种数据类型中的元素都是按照顺序排列的,所以可以使用索引进行取值。

本节要学习的知识点是字典,它不通过索引就能取到值,换句话说,字典是无顺序的数据结构。

字典可以被看成一种列表型的数据结构,是一种可以容纳其他类型数据的容器。

字典中的元素是使用“键-值”表示的,而且“键-值”成对出现,键与值之间存在的关系可以描述为通过键取值。
这是字典的核心概念,类似通过部首查字

图示:

在这里插入图片描述

语法格式及字典的创建

创建字典的方法:

  1. 使用花括号({})和键值对(key-value pairs):
my_dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
  1. 使用内置的dict()函数:
my_dict = dict(key1='value1', key2='value2', key3='value3')
  1. 使用包含键值对的列表和列表解析:
key_value_pairs = [('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')]
my_dict = {key: value for key, value in key_value_pairs}

在这个代码片段中,key_value_pairs是一个包含键值对的列表,每个键值对由两个元素组成,分别是键和对应的值。

列表中的每个元素都代表一个键值对,例如 (‘key1’, ‘value1’)、(‘key2’, ‘value2’) 等。

my_dict = {key: value for key, value in key_value_pairs} 是使用列表解析创建字典的方式

在这个列表解析中,我们遍历 key_value_pairs 列表中的每个元素,将每个元素中的第一个元素作为键,第二个元素作为值,然后使用这些键值对创建一个新的字典 my_dict。

过程如下:

  • 在列表解析中,迭代 key_value_pairs 列表中的每个元素,每次迭代都将该元素解构为 key 和 value。
  • 在每次迭代中,将 key 作为键,value 作为对应的值,创建一个键值对,然后将该键值对添加到新的字典 my_dict 中。
  • 最终,my_dict 将包含原始列表中的所有键值对,以键为索引的字典对象就创建完成。
  1. 使用zip()函数结合两个列表来创建字典:
keys = ['key1', 'key2', 'key3']
values = ['value1', 'value2', 'value3']
my_dict = dict(zip(keys, values))

这些是创建字典的一些常见方式,您可以根据具体的需求选择使用最适合的方式来创建字典。无论哪种方式,都可以灵活地创建具有键值对的字典对象

重点看前两种方法就可以。

字典的日常操作

1. 获取字典的值

# 定义一个字典
my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'New York'}

# 获取字典中的值
name = my_dict['name']
age = my_dict['age']
city = my_dict['city']

# 打印获取到的值
print("Name:", name)
print("Age:", age)
print("City:", city)

当使用字典的键来获取值时,如果键不存在,会引发 KeyError 错误。

country = my_dict.get('country', 'Unknown')  # 键不存在时使用默认值

这样获取出来之后就变成了:
Country: Unknown

2. 获取字典视图的三个方法

字典提供了三个方法来获取字典的视图,它们分别是 keys()、values() 和 items()。这些方法返回的是字典视图对象,可以用于遍历字典的键、值和键值对。

  • key()
    该方法返回一个包含字典所有键的视图对象,可以通过遍历来获取每个键。
my_dict = {'name': 'John', 'age': 25, 'city': 'New York'}
keys_view = my_dict.keys()
for key in keys_view:
    print(key)
  • values()
    该方法返回一个包含字典所有值的视图对象,可以通过遍历来获取每个值
my_dict = {'name': 'John', 'age': 25, 'city': 'New York'}
values_view = my_dict.values()
for value in values_view:
    print(value)
  • items()
    该方法返回一个包含字典所有键值对的视图对象,可以通过遍历来获取每个键值对。
my_dict = {'name': 'John', 'age': 25, 'city': 'New York'}
items_view = my_dict.items()
for key, value in items_view:
    print(key, value)

3. 增加元素,修改元素,删除元素

my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'qingdao'}

# 增加元素
my_dict['gender'] = 'male'
my_dict['country'] = 'China'

# 打印字典
print("字典增加元素后的内容:", my_dict)

# 修改元素
my_dict['age'] = 20
my_dict['city'] = 'Beijing'

# 打印字典
print("字典修改元素后的内容:", my_dict)

# 删除元素
del my_dict['country']

# 打印字典
print("字典删除元素后的内容:", my_dict)

执行结果:

字典增加元素后的内容: {'name': 'mufenggrow', 'age': 19, 'city': 'qingdao', 'gender': 'male', 'country': 'China'}
字典修改元素后的内容: {'name': 'mufenggrow', 'age': 20, 'city': 'Beijing', 'gender': 'male', 'country': 'China'}
字典删除元素后的内容: {'name': 'mufenggrow', 'age': 20, 'city': 'Beijing', 'gender': 'male'}

4. 字典的遍历

my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'qingdao'}

# 遍历键
print("遍历键:")
for key in my_dict:
    print(key)

# 遍历值
print("\n遍历值:")
for value in my_dict.values():
    print(value)

# 遍历键值对
print("\n遍历键值对:")
for key, value in my_dict.items():
    print(key, value)

执行结果:

遍历键:
name
age
city

遍历值:
mufenggrow
19
qingdao

遍历键值对:
name mufenggrow
age 19
city qingdao

本例中:

  • 使用 for key in my_dict 的方式遍历字典的键,并分别打印每个键。
  • 使用 for value in my_dict.values() 的方式遍历字典的值,并分别打印每个值。
  • 使用 for key, value in my_dict.items() 的方式遍历字典的键值对,并分别打印每个键和对应的值。

5. 字典的常用方法

常用的方法有:

  • formkeys()方法
  • get() 方法
  • setdefault() 方法
  • pp() 方法

以下是四个方法的代码示例,基于字典的增加、获取、设置和删除操作:

  • fromkeys() 方法:
keys = ['name', 'age', 'city', 'gender', 'country']
default_value = 'Unknown'

my_dict = dict.fromkeys(keys, default_value)

print(my_dict)

输出结果:

{'name': 'Unknown', 'age': 'Unknown', 'city': 'Unknown', 'gender': 'Unknown', 'country': 'Unknown'}

fromkeys() 方法用于创建一个新的字典,其中使用指定的键列表作为键,使用给定的默认值作为对应的值。
  • get() 方法:
my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'QD', 'gender': 'Male', 'country': 'China'}

age = my_dict.get('age')
occupation = my_dict.get('occupation', 'Unknown')

print("Age:", age)
print("Occupation:", occupation)

输出结果:

Age: 19
Occupation: Unknown

get() 方法用于根据给定的键获取字典中对应的值。如果键存在,则返回对应的值;如果键不存在,则返回指定的默认值(如果没有提供默认值,则返回 None)。

  • setdefault() 方法:
my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'QD'}

hobby = my_dict.setdefault('hobby', 'Unknown')
country = my_dict.setdefault('country', 'China')

print(my_dict)
print("Hobby:", hobby)
print("Country:", country)
  • 输出结果:
{'name': 'mufenggrow', 'age': 19, 'city': 'QD', 'hobby': 'Unknown', 'country': 'China'}
Hobby: Unknown
Country: China

setdefault() 方法用于获取字典中给定键的值,如果键存在,则返回对应的值;如果键不存在,则将键插入字典并设置指定的默认值。

  • pop() 方法:
my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'QD', 'hobby': 'Unknown', 'country': 'China'}

hobby = my_dict.pop('hobby')

print(my_dict)
print("Popped Hobby:", hobby)

输出结果:

{'name': 'mufenggrow', 'age': 19, 'city': 'QD', 'country': 'China'}
Popped Hobby: Unknown

pop() 方法用于删除并返回字典中给定键的值。

在使用pop()方法时,如果找到key,就会删除该键值对;如果找不到key,就会返回defalut设置的值;如果该值没有设置,就会报错。

my_dict = {'name': 'mufenggrow', 'age': 19, 'city': 'QD'}

# 删除键为 'age' 的键值对,并返回对应的值
age = my_dict.pop('age')
print("Popped Age:", age)
print("Updated Dictionary:", my_dict)

# 尝试删除不存在的键 'country',返回默认值 'Unknown'
country = my_dict.pop('country', 'Unknown')
print("Popped Country:", country)
print("Updated Dictionary:", my_dict)

# 尝试删除不存在的键 'country',没有提供默认值,会抛出 KeyError 异常
country = my_dict.pop('country')

使用 pop(‘country’, ‘Unknown’) 尝试删除键为 ‘country’ 的键值对,由于 ‘country’ 不存在,所以返回了给定的默认值 ‘Unknown’。

最后,使用 pop(‘country’) 尝试删除不存在的键 ‘country’,但由于没有提供默认值,默认情况下会抛出 KeyError 异常。

总结

我是沐风晓月,我在csdn等你

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

👍 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

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

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

相关文章

广告数仓:可视化展示

系列文章目录 广告数仓:采集通道创建 广告数仓:数仓搭建 广告数仓:数仓搭建(二) 广告数仓:全流程调度 广告数仓:可视化展示 文章目录 系列文章目录前言一、FineBI1.FineBI下载2.软件安装3.配置数据库 二、数据可视化1…

I3C协议手册研读-2

阿兴的理解 I3C的时序主要包括SDR模式、HDR模式(HDR-DDR、HDR-TSP、HDR-TSL) 阿兴的理解 上图主要介绍了SDR模式,SDR模式下的波形远看很像I2C波形,因此可以被逻辑分析仪识别到。此外,SDR较I2C增加了一些新的特征。 阿兴的理解 图中很好的绘制…

Unity 事件监听与广播(高度解耦合,观察者模式)

文章目录 1. 目的2. 主要思路3. 基础类4. EventCenter 事件中心类5. 测试 1. 目的 使用观察者模式降低模块间的耦合性 2. 主要思路 通过C# 的 Dictionary 存放事件码和事件的委托添加事件: 判断字典是否有该事件码,没有添加判断当前委托类型与添加的事…

微客云接口支持话费充值,大批量充值更方便

目前话费作为生活中的必需品,只要使用手机就一定会用到话费充值。 但是目前市场上可供话费充值的渠道比如:支付宝、微信、各大银行app,只能单笔充值,如果有几百几千个号码,只能单笔去充值,根本是不可能实现…

Qt实现拖拽功能(支持拖放文件、拖放操作)

目录 拖放Qt程序接受其他程序的拖拽部件/控件之间相互拖放总结 拖放 拖放是在一个应用程序内或者多个应用程序之间传递信息的一种直观的现代操作方式。除了为剪贴板提供支持外,通常它还提供数据移动和复制的功能。 拖放操作包括两个截然不同的动作:拖动和放下。Qt窗口部件可以…

津津乐道设计模式 - 享元模式详解(以影院座位举例让你快速掌握)

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

itext 7批量生成pdf文件并以压缩包形式下载

itext 7批量生成pdf文件并以压缩包形式下载 引入jar <dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>7.0.3</version><type>pom</type></dependency>代码实现–生成…

逻辑漏洞小结之SRC篇(值得收藏,反复看!)

​​​​​最近在挖各大src&#xff0c;主要以逻辑漏洞为主&#xff0c;想着总结一下我所知道的一些逻辑漏洞分享一下以及举部分实际的案例展示一下&#xff0c;方便大家理解。 主要从两个方面看&#xff0c;业务方面与漏洞方面。&#xff08;接下来就从拿到网站的挖掘步骤进行…

如何使用模板化消息进行客户服务?(参考salesmartly)

如何使用模板化消息进行客户服务&#xff1f;&#xff08;参考salesmartly&#xff09; 一整天一遍又一遍地重复相同的答案可能会很乏味&#xff0c;尤其是对于您的客户服务团队而言。模板化消息&#xff0c;也称为预制回复或回复模板&#xff0c;已成为许多客户服务团队必备功…

Kong(Without DB)的安装和基本使用

下载和安装 Docs 这里以Centos为例 sudo yum install kong-enterprise-edition-3.3.0.0.rpm配置 ​ Kong的官网提供了两个配置模式一个是 Using a database 另一个是使用 yaml配置文件的形式&#xff0c;安装好后默认配置文件默认是/etc/kong/kong.conf.default 二者对比 …

React V6实现类似与vue的eventBus

功能背景 想要实现类似于vue的eventBus的功能&#xff0c;由一个组件通知其他一个或多个组件。应用场景&#xff1a;比如一个可视化大屏的界面&#xff0c;当筛选条件变化的时候&#xff0c;要同时通知到大屏中所有图表一起变化。&#xff08;当然使用store也是可以的&#xff…

逻辑回归算法实现

目录 1.关于逻辑回归的原理解析和准备工作 2.关于激活函数 3.关于数据集 4.编写LogisticsRegression类 5.逻辑回归测试 6.结果 1.关于逻辑回归的原理解析和准备工作 逻辑回归原理相关内容&#xff0c;请参考博主的另一篇文章&#xff1a;机器学习&#xff08;二&#xff…

菜鸟重磅推出多款科技新品,“工业大脑”PLC国产化获突破

“决策参谋”供应链计划、“工业大脑”PLC、“智能制造”科技解决方案……6月28日&#xff0c;在2023全球智慧物流峰会上&#xff0c;菜鸟自研的一批新产品、新方案正式曝光。菜鸟物流科技深耕制造业的成绩单也在峰会期间公布&#xff0c;华晨宝马等一批头部汽车企业已与其展开…

六种提高自己工作效率的方法!

为什么同样的时间&#xff0c;同样的都在休息都在玩&#xff0c;而别人工作却在玩的同时已经完成了一大半了。究竟是怎么做到的呢&#xff1f; 不仅仅是因为别人的工作效率高&#xff0c;而是因为他们会巧用工具。 那么你肯定想知道&#xff0c;这款工具是什么样的呢&#xf…

hutool工具类实现excel上传 支持03和07

一直感觉excel表的导入有很多代码&#xff0c;写一次忘一次&#xff0c;类太多&#xff0c;要知道怎么获取Workbook、Sheet、Cell、row等等&#xff0c;这么多类不可能一直记的住&#xff0c;都是写过之后保存&#xff0c;使用的时候拿出来改改&#xff0c;更烦人的是针对offic…

Vue Router replace 编程式导航 缓存路由组件

6.9.路由跳转的 replace 方法 作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式浏览器的历史记录有两种写入方式&#xff1a;push和replace push是追加历史记录replace是替换当前记录&#xff0c;路由跳转时候默认为push方式 开启replace模式 <router-link :replac…

松翰单片机keil环境芯片包

松翰单片机keil环境芯片包&#xff08;SN8F5700系列&#xff09;&#xff1a;安装时与Keil安装位置相同可以直接使用。 安装后依次点击可查看芯片包具体型号&#xff1a; 芯片包下载链接&#xff1a;阿里云盘分享https://www.aliyundrive.com/s/TnHchMhYeh1

Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK进行定序器编程:根据每次触发信号移动感兴趣区域&#xff08;C&#xff09; Baumer工业相机Baumer工业相机BGAPISDK和定序器编程的技术背景Baumer工业相机通过BGAPISDK进行定序器编程功能1.引用合适的类文件2.Baumer工业相机通过BGA…

laravel+vue共用一个域名,使用目录区分接口和项目的nginx配置

1、打包好的项目&#xff1a; 首先将打包好的项目放置public下&#xff0c;如下图 2、nginx配置文件 不带注释的伪静态&#xff08;推荐&#xff09; 备注&#xff1a;若在 location /admin 中的 admin 后面不加 “斜杠/”&#xff0c;则会出现访问 /admin-user 路由&#x…

Oracle Net Services 配置:LISTENER:没有为主机 VM-16-7-centos 返回有效的 IP 地址

问题描述&#xff1a; [rootVM-16-7-centos oracle]# /etc/init.d/oracledb_ORCLCDB-21c configure Configuring Oracle Database ORCLCDB. 准备执行数据库操作 已完成 8% 复制数据库文件 已完成 31% 已完成 100% [FATAL] 正在对命令行参数进行语法分析: 参数"silent&quo…