「Python编程基础」第6章:字典

在这里插入图片描述

文章目录

  • 一、字典数据类型
  • 二、细说字典与列表
  • 三、重要的3个方法:keys()、values()、items()
  • 四、检查字典中是否存在键或值
  • 五、get()方法
  • 六、清空
  • 七、修改
  • 八、字典的嵌套
    • 字典套字典
    • 字典套列表
    • 字典套字典套列表
  • 练习题

一、字典数据类型

编程的 「字典」 其实和现实中,我们使用的「字典」一样。

大家都有用过“新华字典”吧,我们都会根据“索引”去快速找到某个字、词。

编程中的“字典”数据类型,可以说比“新华字典”更容易理解。是由“键-值对”组成的数据。

在这里插入图片描述

字典的索引(键)与列表不一样,字典的索引不仅可以是“数字”,也可以是“字符”。

# 我们来创建一个“字典”。
my_info = {"name": "测试划水老师傅", "sex": "男", "age": "31"}

我们创建了一个字典,并将字典赋给“my_info”这个变量。

我们将个人信息存储在字典中,分别有3个“键值对”,键值对之间以“逗号”隔开。(建议键以英文命名)

二、细说字典与列表

  • 字典中的项是不排序的,列表是有排序的。比如列表中第一项是list[0],而字典没有这个概念。
  • 基于第一条概念,推到出字典无法像列表一样,进行「切片」操作。
  • 访问字典不存在的“项(key)”,会报错“KeyError”,就像列表访问不存在的下标,会报“越界IndexError”的错误一样。
  • 也许你以为字典的创建很麻烦,还不能排序,但是字典远比你想象的强大,因为它支持用任意值作为“键”,并可以通过“键”快速访问数据,后期你会发现,复杂数据的存储,必然要用到字典。
# 手机通讯录
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}
while True:name = input("「通讯录」输入你想查询的人名:")if name == '':breakif name in address_book:print(f'{name}:{address_book[name]}')else:print("暂无该联系人,请添加!")

三、重要的3个方法:keys()、values()、items()

Python为我们提供了很多字典的访问和操作方法,我们先来看看最重要的3个方法,这3个你一定要掌握!

keys() —— 字典的“键”。

values() —— 字典的“值”。

items() —— 字典的“键值对”。

address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}
print(address_book.keys())
print(address_book.values())
print(address_book.items())
"""代码运行结果:
dict_keys(['kevin', 'cc', 'yaya'])
dict_values(['18000000000', '18000000001', '18000000002'])
dict_items([('kevin', '18000000000'), ('cc', '18000000001'), ('yaya', '18000000002')])
"""

我们发现,返回的内容看似是列表,其实不是,不信你可以用我们之前学过的“type”试试。

那么既然不是列表,就没有append()等列表方法,但我们发现这些数据可以用for循环进行遍历。

# keys(),字典键的循环遍历
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}for k in address_book.keys():print(k)
"""代码运行结果:
kevin
cc
yaya
"""
# values(),字典值的循环遍历
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}for v in address_book.values():print(v)"""代码运行结果:
18000000000
18000000001
18000000002
"""
# values(),字典值的循环遍历
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}for k,v in address_book.items():print(f'键:{k} 对应的值 值:{v}')"""代码运行结果:
键:kevin 对应的值 值:18000000000
键:cc 对应的值 值:18000000001
键:yaya 对应的值 值:18000000002
"""

四、检查字典中是否存在键或值

还记得之前我们学习列表时,用到的 "in\not in"吗?在字典中,这个操作同样适用。

# 检查字典中是否存在键或值
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}print("kevin" in address_book.keys())
print("18000000000" in address_book.values())"""代码运行结果:
True
True
"""

五、get()方法

我们前面学过通过使用key来获取值,但是存在一个问题,如果key不存在,代码会报错,此时我们有一个更好的方法来获取,就是通过get()方法,如果key不存在,会返回一个默认值,代码不会报错。

# get()方法
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}print(address_book.get("kevin"))
print(address_book.get("kevi"))"""代码运行结果:
18000000000
None
"""

六、清空

clear():清空字典数据,保留空字典。

d2 = {"姓名":"测试划水老师傅","性别":"男","年龄":"30"}
d2.clear()
print(d2)
"""代码运行结果:
{}
"""

七、修改

字典序列[key] = 值 ,如果key存在修改,不存在则是新增。

d1 = {"姓名":"测试划水老师傅","性别":"男","年龄":"30"}
d1["姓名"] = "python"
print(d1)
"""代码运行结果:
{'姓名': 'python', '性别': '男', '年龄': '30'}
"""

八、字典的嵌套

我们会发现,生活中有些事物的关联关系很复杂。

字典套字典

# 我们记录不同大学中,计算机专业的学生总人数
universities = {"tsinghua": {"computer_major": "49人"}, "Peking": {"computer_major": "50人"}}
# 使用账号密码登录网站,在代码中的请求如下。
login = {"username": "test","password":"111111"}

字典套列表

# 在一些网站上,我们要一次上传多张照片,此时照片是一个列表。
upload_img = {"my_imgs": ["https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000001.jpg","https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000002.jpg"]}

字典套字典套列表

# 假设,我们上传照片需要分类,此时结构会更复杂。
upload_img = {{"my_life_imgs": ["https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000001.jpg","https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000002.jpg"]}, {"my_work_imgs": ["https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000001.jpg","https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000002.jpg"]}}

这些结构看起来也许比较复杂,其实理解后,会发现数据存储,数据读取会很方便。

练习题

"""
评分系统:
校园演讲大赛,评委给参赛的5名选手,分别给出了最终的评分。
请根据评分表,将选手的一个最高分、最低分去掉,并求出平均分数。
最后,请将各位选手的平均得分,由高到低排序,输出选手编号和得分。
"""

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

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

相关文章

预训练--微调

预训练–微调 一个很简单的道理,如果我们的模型是再ImageNet下训练的,那么这个模型一定是会比较复杂的,意思就是这个模型可以识别到很多种类别的即泛化能力很强,但是如果要它精确的识别是否某种类别,它的表现可能就不…

frp内网穿透部署,轻松实现内网服务对外访问

FRP(Fast Reverse Proxy)是一种轻量级、高性能的反向代理工具,利用反向代理技术将公网请求转发至内网服务器上,并将内网服务器的响应再次转发至公网请求者。在实现内网穿透时,FRP能够将公网与内网之间的隔离突破&#…

ArkTS快速入门

一、概述 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者可以…

jmeter常用的性能测试监听器

jmeter中提供了很多性能数据的监听器,我们通过监听器可以来分析性能瓶颈 本文以500线程的阶梯加压测试结果来描述图表。 常用监听器 1:Transactions per Second 监听动态TPS,用来分析吞吐量。其中横坐标是运行时间,纵坐标是TPS…

火狐,要完了!

在过去几年中,关于Firefox 浏览器的衰落有过不少讨论。目前来说,很多公共的以及私营的大型网站都缺乏对Firefox的适当支持。但是Firefox也多次试图“自救”,甚至就在不久前,Mozilla 通过官博发文,表示 Firefox 在 2023…

一个 postman实现参数化让我丢掉了一份20k的offer

什么时候会用到参数化 比如:一个模块要用多组不同数据进行测试 验证业务的正确性 Login模块:正确的用户名,密码 成功;错误的用户名,正确的密码 失败 postman实现参数化 在实际的接口测试中,部分参数…

设计并实现一个多线程图书馆管理系统,涉及数据库操作

没有实现全部功能,希望路过的大佬,可以实现全部功能,在评论区聊聊 创建数据库library-demo CREATE DATABASE library-demo创建图书表book CREATE TABLE book (bookId int(11) NOT NULL AUTO_INCREMENT COMMENT 图书ID,bookName varchar(15)…

Leetcode—213.打家劫舍II【中等】

2023每日刷题&#xff08;五十二&#xff09; Leetcode—213.打家劫舍II 算法思路 实现代码 class Solution { public:// 左闭右开int rob1(vector<int>& nums, int start, int end) {int n nums.size();int f0 0, f1 0, new_f 0;for(int i start; i < end…

挡墙边界提取

基于点云对挡墙边界进行提取 算法思路 将点转到极坐标系下&#xff0c;并得到极坐标系下的索引值&#xff0c;并输出距离信息。 double getCellIndexFromPoints(double x, double y, int& chI) {// 计算点到原点的欧几里得距离double distance sqrt(x * x y * y);// 将…

vue中组件传值方法

父组件给子组件传值 一、 1.在子组件标签中写入父组件传递数据 向下传递prop 2.在子组件内声明props选项接收父组件传递的数据 props:[,,] 父组件&#xff1a; <Header :msgmsg ></Header> 子组件&#xff1a; props:[msg], 二、 provide i…

vue3 vue-router编程式导航(二)

文章目录 一、跳转到指定路径1. query传参2. Params传参 二、前进/后退三、替换当前页 Vue Router提供了强大且灵活的编程式导航功能&#xff0c;能够通过代码来控制路由的切换和跳转。本篇博客将介绍如何在Vue 3应用程序中使用Vue Router进行编程式导航。 一、跳转到指定路径…

markdown记录

文章目录 基础操作使用一级列表、二级列表 博文链接 基础操作 使用一级列表、二级列表 博文链接 CSDN-Markdown语法集锦 CSDN-markdown语法之如何使用LaTeX语法编写数学公式 CSDN Markdown简明教程1-关于Markdown CSDN Markdown简明教程2-基本使用 CSDN Markdown简明教程3-表…