




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章字典与集合5.1字典的创建与访问5.2字典的常见操作5.3字典的常用方法5.4字典的高级应用5.5集合5.6字典与集合的应用实例本章小结
5.1字典的创建与访问
Python语言中的字典是一种无序的、可变的、键值对(key-valuepair)集合的数据结构。字典中的每个元素都是一个键值对,其中键(key)是唯一的,用于查找对应的值(value)。字典的键通常是不可变的数据类型(如整数、浮点数、字符串、元组等),而值可以是任何数据类型。字典提供了快速查找、添加和删除元素的操作,使其成为存储关联数据(如数据库记录或配置文件)的理想选择。
5.1.1字典的创建
在Python中,字典可以通过多种方式创建,最常见的是使用花括号{}和键值对语法。每个键值对之间使用逗号分隔,键和值之间使用冒号分隔。
假设某个学校的学生管理系统中有表5-1所示的学生信息,包括学生的学号和姓名,且学号和姓名一一对应。下面创建一个字典,用来存放这些学生的学号和姓名。
【例5-1】
创建字典。
例5-1创建了一个名为students的字典,其中第一个键“10001”对应的值是“张三”,第二个键“10002”对应的值是“李四”。键值对提供了一种灵活且高效地组织和检索数据的方式。
也可以用内置函数dict()来创建字典,如例5-2所示。
【例5-2】
通过dict()创建字典。
在Python中创建字典时需要注意以下几点。
(1)键的唯一性。字典的键必须是唯一的,如果尝试使用相同的键两次,第二次的赋值会覆盖第一次的值。
(2)键的不可变性。字典的键必须是不可变的数据类型,如整数、浮点数、字符串、元组等。列表、集合和字典等可变的数据类型不能用作字典的键。
(3)避免使用复杂或易混淆的键。虽然技术上可以使用任何不可变的数据类型作为键,但最好使用简单、清晰且不易混淆的键,以便于后续维护和理解代码。
(4)避免使用Python内置的特殊方法名(如__init__、__str__等)作为字典的键,因为这可能会导致意外的行为或错误。
(5)避免使用保留字作为字典的键。虽然Python允许使用保留字(如if、for、while等)作为字典的键,但这样做可能会使代码难以理解。
(6)使用合适的键名。键名应该清晰地表达它们所代表的含义。使用有意义的键名可以提高代码的可读性。
(7)避免使用长字符串作为字典的键。如果键是长字符串,考虑是否可以使用更简短的字符串或其他不可变类型作为键,以提高性能和可读性。
(8)注意字典的内存占用。字典会占用一定的内存空间,特别是在处理大量数据时。因此,在创建字典时应考虑内存使用的限制。
5.1.2字典的访问
字典中存储了若干无序的条目,这意味着字典没有索引的概念,访问字典中的值通常是通过键来实现的。当要访问字典里的值时,我们只需使用dictionaryName[key]编写一个表达式即可。其中,dictionaryName表示想要访问的那个字典的变量名,[key]代表想要访问的键。如果该键在字典中,则会返回其对应的值。
【例5-3】
访问字典中的值。
以上代码的输出结果如下:
需要注意的是,当尝试获取一个不存在的关键字所对应的值时,系统会提示“KeyError”异常。
在标准的字典数据结构中,通常是不能直接通过值来访问键的。字典是通过键来快速定位值的,而不是通过值来定位键的。这是因为字典是以哈希表的形式实现的,它通过键的哈希值来定位对应的值,而不是通过值的哈希值来定位对应的键。
5.2字典的常见操作
1.字典更新字典创建后可根据需要对其进行增加或修改键值对操作。添加一个新的键值对到字典中,或者修改字典中现有键的值,可以使用以下语法:其中,dictionaryName表示字典名,key表示键,value表示值。
【例5-4】
增加或者修改值。
以上代码的输出结果如下:
当不再需要字典中的某一条目时,可以使用删除操作。删除字典中条目的语法格式如下:
【例5-5】
删除值。
【例5-6】
清空字典条目。
【例5-7】
删除字典。
2.获取字典的长度
在Python中,如果需要得到字典的长度,可以使用“len()”函数:
该函数返回字典条目的个数,即键值对的总个数。
【例5-8】
返回字典长度。
3.查找字典条目
若要判断字典中是否存在某个键,可以使用“in”或“notin”运算符。
【例5-9】
使用in或notin运算符判断字典中是否存在某个键。
4.判断两个字典是否相同
若要判断两个字典是否相同,可以使用“==”和“!=”运算符。
【例5-10】
相等性检测。
5.字典合并
若要将两个字典合并成一个,可以使用合并操作符“|”。
【例5-11】
字典合并。
5.3字典的常用方法
除了上述的字典常用操作,Python还提供了许多内置方法来操作字典。表5-2列出了可以被字典对象调用的一些常用方法。
【例5-12】
字典的常用方法。
以上代码的输出结果如下:
5.4字典的高级应用
5.4.1字典的嵌套嵌套字典是指在一个字典中包含一个或多个其他字典。这样的结构可以创建复杂的数据组织形式,类似于树状结构。嵌套字典能够有效地存储结构化数据,表示复杂的层次结构,每个层次都包含多个键值对。通过嵌套字典,将相关的数据组织在一起,以便更好地组织和管理数据,更容易地访问和操作。
【例5-13】
嵌套字典。
【例5-14】
访问嵌套字典。
【例5-16】
向嵌套字典中添加新的键值对。
若要删除嵌套字典中的指定键值对,可以使用del关键字和多级索引定位到要删除的位置。
【例5-17】
删除嵌套字典。
【例5-18】
遍历嵌套字典。
5.4.2字典的遍历
使用for循环是遍历字典最常见的方法,可以分别遍历字典的键、值或键值对。
【例5-19】
使用for循环遍历字典。
以上代码的输出结果如下:
除了使用for循环,还有很多方法来遍历字典。比如字典推导式,这是一种在Python中用来快速创建字典的方法,它允许从一个可迭代的对象(通常是另一个字典)中生成一个新的字典,同时可以根据条件过滤和转换数据。也可以在字典推导式中遍历原字典的键和值,并根据条件创建新的键值对。
字典推导式的基本语法格式如下:
其中:“key_expression”为生成字典键的表达式;“value_expression”为生成字典值的表达式;“item”为可迭代对象中的每个元素;“iterable”用来迭代生成字典的对象,通常是一个字典的items()方法(返回键值对)或者keys()方法(返回键);“condition(可选)”为条件表达式,用于过滤要包含在最终字典中的元素。
【例5-20】
使用字典推导式遍历字典。
以上代码的输出结果如下:
本例中“id:name”定义了新字典中的键值对结构;“forid,nameinstudents.items()”表示从students字典的键值对中进行迭代;“ifint(id)>10001”是一个条件,只有当学号大于10001时才选择该键值对。使用字典推导式可以使代码更简洁和易于理解,特别是在需要根据现有数据创建或转换字典时非常有用。
【例5-21】
使用enumerate()函数遍历字典。
5.4.3字典的排序
相比于列表,字典是一个无序的数据结构,一般不进行排序,但是如果想要对字典进行排序,可以通过sorted()函数实现。sorted()函数可以对序列进行排序,并将排序结果放到一个列表中,然后返回这个列表。
【例5-22】
字典排序。
在排序时,key参数指定排序的依据,lambda匿名函数用于获取排序依据。s是键值对组成的元组,s[0]获取元组中的第一个元素,即键。上述排序默认是升序,如果需要降序排列,则将sorted()函数中的reverse参数设定为True即可。
5.5集
合
集合是Python中的一种数据结构,与列表、元组、字典等数据结构不同,它没有重复的元素。它是一个无序且没有重复元素的序列,集合中的元素必须是可hash对象,即数字、字符串、元组等不可变对象。集合不记录元素的位置和插入顺序,因此不支持索引、切片等其他序列类的操作。集合有以下几个特征:
(1)集合中的元素是无序的,也就是说,每次创建集合时,集合中的元素的顺序可能不同。
(2)集合中的元素是唯一的,也就是说,集合中的元素不能重复。
(3)集合是可变的,也就是说,可以在集合中添加、删除元素。
5.5.1集合的创建
创建集合的方法有两种:使用“{}”和使用set()函数。其中,定义空集合不能使用“{}”,因为“{}”是创建空字典的方法,但可以使用set()函数。使用“{}”创建的集合中的元素必须是不可变的,元素与元素之间要保证不相同。例如:
5.5.2集合的访问
由于Python的集合是无序的,也没有键和值的概念,因此,在进行集合访问时通常使用for循环的遍历访问或通过集合名称整体输出。
【例5-23】
在一个整数列表中随机选择10个元素并输出其中互不相同的数。
【分析】
这里需要用到random库中的randint()函数和choice()函数。首先,创建一个整数列表,然后在该列表中随机选择10个元素,最后通过set()函数去重。
【参考代码】
以上代码的运行结果如下:
5.5.3集合的数学运算
交集、并集、差集和对称差集是数学运算中常见的四种运算。表5-3展示了数学里集合的不同运算在Python中所对应的运算符和方法。
【例5-24】
某学校有两个班级,班级A需要学习数学、语文、英语、物理、化学和生物,班级B需要学习数学、语文、英语、政治、地理和历史。请使用Python语言实现两个班级课程的交集、并集、差集和对称差集。
【分析】
班级A和班级B的交集为数学、语文和英语;并集为数学、语文、英语、物理、化学、生物、政治、地理、历史;差集为物理、化学和生物;对称差集为物理、化学、生物、政治、地理、历史。
【参考代码】
以上代码的输出结果如下:
5.5.4集合的比较运算符
比较运算符是用于对常量、变量或表达式的结果进行大小及是否相同的比较。比较的结果为布尔(bool)类型,如果结果成立,则返回True(真),否则返回False(假)。表5-4列出了返回值是True和False的方法和比较运算符。
【例5-25】
集合的比较。
以上代码的运行结果如下:
5.5.5集合的基本操作
除了与数学里的集合计算有关的方法和运算符,集合类型还有一些为了实用性而添加的方法,其汇总如表5-5所示。
【例5-26】
集合的基本操作。
5.6字典与集合的应用实例
【例5-27】
假设一位教育工作者负责管理一所学校的学生成绩。现在需要一个简单而有效的系统来存储和管理学生的信息以及他们的成绩。请开发一个学生成绩管理系统,用于存储学生的姓名和对应的成绩,并提供以下功能:
(1)添加学生的姓名和成绩;
(2)查找特定学生的成绩;
(3)显示所有学生及其成绩(按成绩升序);
(4)计算班级平均成绩。
【参考代码】
以上代码的输出结果如下:
【例5-28】
假设一所大学的教务管理人员需要开发一个系统来管理学生的课程考试成绩。该系统的功能包括:存储每个学生的成绩;计算每个学生的平均成绩;找出某门课程所有学生的成绩;找出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河北省安全员《A证》考试题库及答案
- 二零二五年度智能制造入股合同协议书
- 2025年度农业科技企业员工借调与农业技术推广合同
- 2025年度个体工商户合伙协议范文与投资融资及财务规划协议
- 2025年度征收城市老旧危房房屋拆迁补偿协议
- 2025年度人事专员劳动合同(附员工培训服务内容)
- 2025年度文化产业发展劳动合同法规范与创意人才合同
- 2025年度个人租赁市场租赁合同电子签名合同
- 2025年度健康养生馆店铺承包合作协议
- 2025年度太阳能光伏发电站机电安装服务协议
- HJ 193-2013 环境空气气态污染物(SO2、NO2、O3、CO)连续自动监测系统安装验收技术规范
- 质量环境职业健康安全管理体系三合一整合全套体系文件(管理手册+程序文件)
- 六年级《环境教育》计划及教案设计
- 2019年压力性损伤预防治疗临床实践指南
- 2024年湖南邮电职业技术学院单招职业适应性测试题库含答案
- 2024年江苏农林职业技术学院单招职业适应性测试题库附答案
- 2024年江苏农牧科技职业学院单招职业适应性测试题库汇编
- JBT 2231.3-2011 往复活塞压缩机零部件 第3部分:薄壁轴瓦
- 旅游学概论(郭胜 第五版) 课件 第1、2章 旅游学概述、旅游的产生与发展
- 科普知识小学生电力科普小讲座
- 社会支持对青少年亲社会行为的影响:链式中介模型
评论
0/150
提交评论