关于“Python”的核心知识点整理大全12

news2024/11/15 10:52:42

目录

6.3.3 按顺序遍历字典中的所有键

6.3.4 遍历字典中的所有值

6.4 嵌套

6.4.1 字典列表

aliens.py

6.4.2 在字典中存储列表

pizza.py

favorite_languages.py

注意

往期快速传送门👆(在文章最后):


6.3.3 按顺序遍历字典中的所有键

字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。 这不是问题,因为通常你想要的只是获取与键相关联的正确的值。

要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函 数sorted()来获得按特定顺序排列的键列表的副本:

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

这条for语句类似于其他for语句,但对方法dictionary.keys()的结果调用了函数sorted()。 这让Python列出字典中的所有键,并在遍历前对这个列表进行排序。输出表明,按顺序显示了所 有被调查者的名字:

Edward, thank you for taking the poll.
Jen, thank you for taking the poll.
Phil, thank you for taking the poll.
Sarah, thank you for taking the poll.

6.3.4 遍历字典中的所有值

如果你感兴趣的主要是字典包含的值,可使用方法values(),它返回一个值列表,而不包含 任何键。例如,如果我们想获得一个这样的列表,即其中只包含被调查者选择的各种语言,而不 包含被调查者的名字,可以这样做:

favorite_languages = {
 'jen': 'python',
 'sarah': 'c',
 'edward': 'ruby',
 'phil': 'python', 
 }
print("The following languages have been mentioned:")
for language in favorite_languages.values():
 print(language.title()) 

这条for语句提取字典中的每个值,并将它们依次存储到变量language中。通过打印这些值, 就获得了一个列表,其中包含被调查者选择的各种语言:

The following languages have been mentioned:
Python
C
Python
Ruby

这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题, 但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set)。 集合类似于列表,但每个元素都必须是独一无二的:

favorite_languages = {
 'jen': 'python',
 'sarah': 'c',
 'edward': 'ruby',
 'phil': 'python',
 }
print("The following languages have been mentioned:")
1 for language in set(favorite_languages.values()):
 print(language.title()) 

通过对包含重复元素的列表调用set(),可让Python找出列表中独一无二的元素,并使用这 些元素来创建一个集合。在1处,我们使用了set()来提取favorite_languages.values()中不同的 语言。

结果是一个不重复的列表,其中列出了被调查者提及的所有语言:

The following languages have been mentioned:
Python
C
Ruby 

随着你更深入地学习Python,经常会发现它内置的功能可帮助你以希望的方式处理数据。

6.4 嵌套

有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你 可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。正如下面的示例将演示的, 嵌套是一项强大的功能。

6.4.1 字典列表

字典alien_0包含一个外星人的各种信息,但无法存储第二个外星人的信息,更别说屏幕上 全部外星人的信息了。如何管理成群结队的外星人呢?一种办法是创建一个外星人列表,其中每 个外星人都是一个字典,包含有关该外星人的各种信息。例如,下面的代码创建一个包含三个外 星人的列表:

aliens.py

alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}
1 aliens = [alien_0, alien_1, alien_2]
for alien in aliens:
 print(alien) 

我们首先创建了三个字典,其中每个字典都表示一个外星人。在处,我们将这些字典都放 到一个名为aliens的列表中。最后,我们遍历这个列表,并将每个外星人都打印出来:

{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15} 

更符合现实的情形是,外星人不止三个,且每个外星人都是使用代码自动生成的。在下面的 示例中,我们使用range()生成了30个外星人:

# 创建一个用于存储外星人的空列表
aliens = []
# 创建30个绿色的外星人
1 for alien_number in range(30):
2 new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
3 aliens.append(new_alien)
# 显示前五个外星人
4 for alien in aliens[:5]:
 print(alien)
print("...")
# 显示创建了多少个外星人
5 print("Total number of aliens: " + str(len(aliens)))

在这个示例中,首先创建了一个空列表,用于存储接下来将创建的所有外星人。在1处, range()返回一系列数字,其唯一的用途是告诉Python我们要重复这个循环多少次。每次执行这个 循环时,都创建一个外星人(见2),并将其附加到列表aliens末尾(见3)。在4处,使用 一个切片来打印前五个外星人;在5处,打印列表的长度,以证明确实创建了30个外星人:

{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
...
Total number of aliens: 30

这些外星人都具有相同的特征,但在Python看来,每个外星人都是独立的,这让我们能够独 立地修改每个外星人。

在什么情况下需要处理成群结队的外星人呢?想象一下,可能随着游戏的进行,有些外星人 会变色且移动速度会加快。必要时,我们可以使用for循环和if语句来修改某些外星人的颜色。 例如,要将前三个外星人修改为黄色的、速度为中等且值10个点,可以这样做:

# 创建一个用于存储外星人的空列表
aliens = []
# 创建30个绿色的外星人
for alien_number in range (0,30):
 new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
 aliens.append(new_alien)
for alien in aliens[0:3]:
 if alien['color'] == 'green':
 alien['color'] = 'yellow'
 alien['speed'] = 'medium'
 alien['points'] = 10
# 显示前五个外星人
for alien in aliens[0:5]:
 print(alien)
print("...") 

鉴于我们要修改前三个外星人,需要遍历一个只包含这些外星人的切片。当前,所有外星人 都是绿色的,但情况并非总是如此,因此我们编写了一条if语句来确保只修改绿色外星人。如果 外星人是绿色的,我们就将其颜色改为'yellow',将其速度改为'medium',并将其点数改为10, 如下面的输出所示:

{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
... 

你可以进一步扩展这个循环,在其中添加一个elif代码块,将黄色外星人改为移动速度快且 值15个点的红色外星人,如下所示(这里只列出了循环,而没有列出整个程序):

for alien in aliens[0:3]:
 if alien['color'] == 'green':
 alien['color'] = 'yellow'
 alien['speed'] = 'medium'
 alien['points'] = 10
 elif alien['color'] == 'yellow':
 alien['color'] = 'red'
 alien['speed'] = 'fast'
 alien['points'] = 15 

经常需要在列表中包含大量的字典,而其中每个字典都包含特定对象的众多信息。例如,你 可能需要为网站的每个用户创建一个字典(就像6.3.1节的user.py中那样),并将这些字典存储在 一个名为users的列表中。在这个列表中,所有字典的结构都相同,因此你可以遍历这个列表, 并以相同的方式处理其中的每个字典。

6.4.2 在字典中存储列表

有时候,需要将列表存储在字典中,而不是将字典存储在列表中。例如,你如何描述顾客点的比萨呢?如果使用列表,只能存储要添加的比萨配料;但如果使用字典,就不仅可在其中包含 配料列表,还可包含其他有关比萨的描述。 在下面的示例中,存储了比萨的两方面信息:外皮类型和配料列表。其中的配料列表是一个 与键'toppings'相关联的值。要访问该列表,我们使用字典名和键'toppings',就像访问字典中 的其他值一样。这将返回一个配料列表,而不是单个值:

pizza.py

# 存储所点比萨的信息
1 pizza = {
 'crust': 'thick',
 'toppings': ['mushrooms', 'extra cheese'],
 }
# 概述所点的比萨
2 print("You ordered a " + pizza['crust'] + "-crust pizza " +
 "with the following toppings:")
3 for topping in pizza['toppings']:
 print("\t" + topping) 

我们首先创建了一个字典,其中存储了有关顾客所点比萨的信息(见1)。在这个字典中, 一个键是'crust',与之相关联的值是字符串'thick';下一个键是'toppings',与之相关联的值 是一个列表,其中存储了顾客要求添加的所有配料。制作前我们概述了顾客所点的比萨(见2)。 为打印配料,我们编写了一个for循环(见3)。为访问配料列表,我们使用了键'toppings',这 样Python将从字典中提取配料列表。

下面的输出概述了要制作的比萨:

You ordered a thick-crust pizza with the following toppings:
 mushrooms
 extra cheese

每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。在本章前面有 关喜欢的编程语言的示例中,如果将每个人的回答都存储在一个列表中,被调查者就可选择多种 喜欢的语言。在这种情况下,当我们遍历字典时,与每个被调查者相关联的都是一个语言列表, 而不是一种语言;因此,在遍历该字典的for循环中,我们需要再使用一个for循环来遍历与被调 查者相关联的语言列表:

favorite_languages.py

1 favorite_languages = {
 'jen': ['python', 'ruby'],
 'sarah': ['c'],
 'edward': ['ruby', 'go'],
 'phil': ['python', 'haskell'],
 }
2 for name, languages in favorite_languages.items():
 print("\n" + name.title() + "'s favorite languages are:")
3 for language in languages:
 print("\t" + language.title()) 

正如你看到的,现在与每个名字相关联的值都是一个列表(见1)。请注意,有些人喜欢的 语言只有一种,而有些人有多种。遍历字典时(见2),我们使用了变量languages来依次存储字 典中的每个值,因为我们知道这些值都是列表。在遍历字典的主循环中,我们又使用了一个for 循环来遍历每个人喜欢的语言列表(见3)。现在,每个人想列出多少种喜欢的语言都可以:

Jen's favorite languages are:
 Python
 Ruby
Sarah's favorite languages are:
 C
Phil's favorite languages are:
 Python
 Haskell
Edward's favorite languages are:
 Ruby
 Go 

为进一步改进这个程序,可在遍历字典的for循环开头添加一条if语句,通过查看len (languages)的值来确定当前的被调查者喜欢的语言是否有多种。如果他喜欢的语言有多种,就 像以前一样显示输出;如果只有一种,就相应修改输出的措辞,如显示Sarah's favorite language is C。


注意

列表和字典的嵌套层级不应太多。如果嵌套层级比前面的示例多得多,很可能有更简单 的解决问题的方案。


Python:核心知识点整理大全1-笔记-CSDN博客

Python:核心知识点整理大全2-笔记-CSDN博客

Python:核心知识点整理大全3-笔记-CSDN博客

Python:核心知识点整理大全4-笔记-CSDN博客、

Python:核心知识点整理大全5-笔记-CSDN博客

Python:核心知识点整理大全6-笔记-CSDN博客

Python:核心知识点整理大全7-笔记-CSDN博客

Python:核心知识点整理大全8-笔记-CSDN博客

Python:核心知识点整理大全9-笔记-CSDN博客

Python:核心知识点整理大全10-笔记-CSDN博客

Python:核心知识点整理大全11-笔记-CSDN博客

往期快速传送门👆(在文章最后):

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

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

相关文章

a16z:加密行业2024趋势“无缝用户体验”

近日,知名加密投资机构a16z发布了“Big ideas 2024”,列出了加密行业在 2024 年几个具备趋势的“大想法”,其中 Seamless UX(无缝用户体验)赫然在列。 从最为直观的理解上,Seamless UX 是在强调用户在使用产…

物联网时代的访问控制研究综述

A survey on Access Control in the Age of Internet of Things 文章目录 A B S T R A C T引言A. Comparison Between This Paper and Existing SurveysB. Contributions II.ACCESS CONTROL BACKGROUNDIII. ACCESS CONTROL CHALLENGES IN IOT SEARCHA. Characteristics of IoT …

一个简单得爬虫小案例:获取西瓜网视频数据【python】

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 第三方模块: requests >>> pip install requests 环境介绍: python 3.8 解释器 pycharm 编辑器 思路分析 找到数据来源 你要爬取的视频 筛选 找不…

EasyX图形化学习(二)

1.消息处理---鼠标消息: 1.ExMessage结构体: ExMessage---这个结构体用于保存鼠标消息。 //定义消息结构体变量 ExMessage msg { 0 }; 2.获取消息: (1)peekmessage函数:用于获取一个消息,…

leetcode面试经典150题——36 旋转图像

题目: 旋转图像 描述: 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1: 输入&#x…

【论文阅读】LoRA: Low-Rank Adaptation of Large Language Models

code:GitHub - microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models" 做法: 把预训练LLMs里面的参数权重给冻结;向transformer架构中的每一层,注入可训练的…

MYSQL练题笔记-子查询-换座位

一、题目相关内容 1)相关的表和题目 2)帮助理解题目的示例,提供返回结果的格式 二、自己初步的理解 没啥思路,我还没做过交换的这种题,所以我觉得这类交换的题以后值得做一个合集,是有点灵活度在里面的&a…

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.…

【Proteus仿真】【51单片机】视力保护仪

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使LCD1602液晶,按键、HC-SR04超声波、PCF8591 ADC、光敏传感器、蜂鸣器、LED等。 主要功能: 系统运行后,LCD1602显示…

云计算:Vmware 安装 FusionCompute

目录 一、理论 1.FusionCompute 二、实验 1.Vmware 安装 FusionCompute(CNA) 2.Vmware 安装 FusionCompute(VRM) 三、问题 1. VRM-WEB登录失败 2.Windows cmd中无法ping通虚拟机 一、理论 1.FusionCompute (…

【C语言】操作符详解(四):结构成员访问操作符

结构成员访问操作符 结构体 ⭐C语言已经提供了内置类型,如: char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学生,描述一本书,这时单一的内置类型是不行的。描述一个学生需要名…

Android VpnService 使用(一)

Android VpnService 使用(一) 本篇算是VpnService 使用的第一篇文章,主要讲述service创建,intent调用. 1: 申请权限 <service android:name".MyVpnService" android:permission"android.permission.BIND_VPN_SERVICE"><intent-filter><ac…

如何将xlsx中的数据通过datagrep导入到mysql数据库表中

在将xlsx数据通过datagrep导入到mysql数据库表中之前需要将xlsx数据导出为csv结尾的格式&#xff0c;因为如果不以csv格式导入会出现乱码。 详细步骤 1、是导入到数据库中没有表 找到对应的数据库&#xff0c;右键点击 选择需要导入的文件&#xff0c;注意一定要选择csv格式…

国家开放大学 湖南开放大学形成性考核 平时作业 统一资料

试卷代号&#xff1a;1258 房屋建筑混凝土结构设计 参考试题 一、单项选择题&#xff08;每小题2分&#xff0c;共计40分&#xff09; 1.( )是将框架结构中的部分跨间布置剪力墙或把剪力墙结构的部分剪力墙抽掉改为框架承重。 A.梁板结构体系 B.框…

Android开发的技术与开发流程

目录 引言 1. Android开发环境搭建 1. 安装Java Development Kit&#xff08;JDK&#xff09; 2. 安装Android Studio 3. 配置虚拟设备&#xff08;可选&#xff09; 4. 创建你的第一个Android项目 5. 连接实体设备&#xff08;可选&#xff09; 2. Android基础知识 1…

CSS第二天导读

1&#xff0c;Emmet语法 Emmet语法的前身是Zen coding&#xff0c;它使用缩写&#xff0c;来提高html / css 的编写速度&#xff0c;Vscode内部已经集成该语法 1.1&#xff0c;快速生成HTML结构语法 1.想要快速生成多个相同标签&#xff0c;加上*就可以了&#xff0c;比如 d…

ChatGLM大模型推理加速之Speculative Decoding

目录 一、推测解码speculative decoding 1、自回归解码 2、speculative decoding 3、细节理解 二、核心逻辑代码 1、算法流程代码 2、模型自回归代码 a、带缓存的模型自回归实现代码 b、优化版本带缓存的模型自回归实现代码 c、ChatGLM的past_key_values的回滚 三、…

前端已死?别低估前端,他是互联网世界的核心!【这是一篇治愈系文章】

文章目录 &#x1f4a5; AI回答&#x1f98b; 现状&#x1f989; 焦虑&#x1f409; 力量&#x1f985; 观点&#x1f423; 粗浅分析&#x1f9a5; 快乐的韭菜&#x1f3c6; 总结 &#x1f4a5; AI回答 前端已死&#xff1f; ai的答案是这样: 前端并没有死掉&#xff0c;它仍然…

【论文阅读】O’Reach: Even Faster Reachability in Large Graphs

Hanauer K, Schulz C, Trummer J. O’reach: Even faster reachability in large graphs[J]. ACM Journal of Experimental Algorithmics, 2022, 27: 1-27. Abstract 计算机科学中最基本的问题之一是可达性问题&#xff1a;给定一个有向图和两个顶点s和t&#xff0c;s可以通过…

python socket编程8 - PyQt6界面实现TCP server/client 多客户端通讯的例子

一、小总结&#xff1a; 首先&#xff0c;在 《python socket编程5 - 最简单的命令行启动的tcp/udp server/client例子》 中实现了最简单的TCP/UDP server和client在命令行下可执行的代码。 然后&#xff0c;分别在《python socket编程6 - 使用PyQt6 开发UI界面实现TCP server…