内容正文:
专题06 字典和集合
信息技术特色专项
授课教师:
日期:2024.0.1.01
学习目标
01
02
掌握字典的创建方法
掌握字典的遍历方法
理解集合的概念
掌握集合的创建及基本操作方法
03
04
学习目录
字典
01
集合
02
PART 01
字典
01
字典是Python中常用的一种数据存储结构,它是由“键-值”对组成,每个“键-值”对称为一个元素,每个元素表示一种映射或对应关系。
“键”可以是Python中任意不可变数据,如整数、实数、复数、字符串、元组等类型,但不能使用列表、集合、字典或其他可变类型作为字典的“键”。
“值”可以取任意数据类型。
字典的创建
02
1. 直接赋值创建字典的一般格式如下:
变量名 = {键1:值1, 键2:值2, 键3:值3,…}
例如:
>>>stu_info = {'num':'20180101', 'name':'Liming', 'sex':'male'} #创建字典
>>>stu_info #查看字典
{'name':'Liming', 'num':'20180101', 'sex':'male'}
字典中元素打印出来的顺序与创建时的顺序不一定相同,这是因为字典中各个元素并没有前后顺序。
字典的创建
03
字典的创建
2.使用内置函数dict()创建字典
还可以用内置函数dict()通过其他“字典”、“(键,值)”对的序列或关键字参数来创建。
例:使用内置函数dict()创建字典。
stu_info1 = {'num':'20180101', 'name':'Liming', 'sex':'male'} #直接赋值创建字典
stu_info2 = dict(stu_info1) #通过其他字典创建
stu_info3 = dict([('num', '20180101'), ('name', 'Liming'), ('sex', 'male')]) #通过“(键,值)”对的序列创建
stu_info4 = dict(num = '20180101', name = 'Liming', sex = 'male') #通过关键字参数创建
stu_info5 = dict(zip(['num', 'name', 'sex'], ['20180101', 'Liming', 'male'])) #通过dict和zip结合创建
if stu_info1 == stu_info2 == stu_info3 == stu_info4 == stu_info5: #判断五个变量是否相等
print("创建字典的5种方式相同") #如果相同输出提示符
else: #如果不相同
print("创建字典的5种方式不相同") #输出提示符
程序运行效果
04
知识库
字典中的“键”是唯一的,创建字典时若出现“键”相同的情况,则后定义的“键-值”对将覆盖先定义的“键-值”对。
例如:
>>>x = {'a':1, 'b':2, 'b':'3'} #直接赋值创建字典x
>>>x #输出字典x
{'a':1,'b':'3'}
字典的访问
05
1.根据键访问值
字典中的每个元素表示一种映射关系,将提供的“键”作为下标可以访问对应的“值”,如果字典中不存在这个“键”则会抛出异常。其语法格式如下:
字典变量名[键]
例如:
>>>stu_info = {'num':'20180105', 'name':'Yinbing', 'sex':'male'} #创建字典
>>>stu_info['num'] #根据num访问学号
'20180105'
>>>stu_info['age'] #指定的键不存在抛出异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'age'
字典的访问
06
2.使用get()方法访问值
在访问字典时,若不确定字典中是否有某个键,可通过get()方法进行获取,若该键存在,则返回其对应的值,若不存在,则返回默认值。其语法格式如下:
dict.get(key[,default=None])
dict为被访问字典名
key是要查找的键
default定义默认值,如果指定键的值不存在,返回该默认值,当default为空时,返回None
例如:
>>>stu_info.get('name') #get()获取学生姓名
'Yinbing'
>>>stu_info.get('age') #get()获取学生年龄,返回值为None
>>>print(stu_info.get('age')) #输出返回值None
None
>>>stu_info.get('age',18) #设置返回默认值为18
18
字典的访问
07
字典的基本操作
1.修改和添加元素
当以指定“键”为下标为字典元素赋值时,有两种含义:
(1)若该“键”在字典中存在,则表示修改该“键”对应的值;
(2)若该“键”不存在,则表示添加一个新的“键-值”对,也就是添加一个新元素到字典中。
例如:
>>>stu_info={'num':'20180105','name':'Yinbing','age':'17'} #创建字典
>>>stu_info['age']='18' #修改age的值
>>>stu_info['age'] #输出修改后的age值
'18'
>>>stu_info['sex']='male' #添加学生性别
>>>stu_info #输出添加后的字典
{'num': '20180105', 'name': 'Yinbing', 'age': '18', 'sex': 'male'}
08
字典的基本操作
2.删除元素
要删除字典中的元素或整个字典,可以使用del命令、clear()、pop()和popitem()方法。
del命令:可根据“键”删除字典中的元素。
例如:
>>>stu_info={'num':'20180105','name':'Yinbing','age':'17'} #创建字典
>>>del stu_info['age'] #删除age及其值
>>>stu_info #输出删除后的字典
{'num': '20180105', 'name': 'Yinbing'}
09
字典的基本操作
clear()方法:用于清除字典中的所有元素。
例如:
>>>stu_info={'num':'20180105','name':'Yinbing','age':'17'} #创建字典
>>>stu_info.clear() #清空字典
>>>stu_info #输出清空后的字典
dict.clear()
dict为要被清空的字典名
该方法不包含任何参数,也没有返回值
10
字典的基本操作
例如:
>>>stu_info={'num':'20180105','name':'Yinbing','age':'17'}#创建字典
>>>stu_info.pop('age') #返回并删除age“键-值”对
'17'
>>>stu_info.pop('age',18) #无指定键,返回默认值18
18
dict.pop(key[,default])
dict为要被删除元素的字典名
key是要被删除的键
default是默认值,当字典中没有要被删除的key时,该方法返回指定的默认值
pop()方法:用于获取指定“键”的值,并将这个“键-值”对从字典中移除。
11
字典的基本操作
3.更新字典
update()方法:可以将新字典的“键-值”对一次性全部添加到当前字典中,如果两个字典中存在相同的“键”,则以新字典中的“值”为准更新当前字典。
dict.update(dict2)
dict为当前字典
dict2为新字典
例如:
>>>stu_info = {'num':'20180105', 'name':'Yinbing', 'age':'17'} #创建字典
>>>stu_info.update({'age':'18', 'sex':'male'}) #修改age的值,同时添加新元素
>>>stu_info #输出字典
{'num':'20180105', 'name':'Yinbing', 'age':'18', 'sex':'male'}
12
字典的基本操作
4.复制字典
复制字典可调用copy()方法,copy()方法返回字典的浅复制。
dict.copy()
dict为需要复制的字典
该方法无参数,返回值为一个新字典
例如:
>>>stu_info={'num':'20180105','name':'Yinbing','age':'17'}
>>>stu_info.copy()
{'num': '20180105', 'name': 'Yinbing', 'age': '17'}
知识库
在Python3中,可以用三种方法复制字典:直接赋值、浅复制和深复制。
(1)直接赋值:对象的引用。
(2)浅复制(copy()方法):拷贝父对象,引用对象内部的子对象。
(3)深复制(deepcopy()方法):copy模块的deepcopy()方法,完全复制父对象及其子对象。
PART 02
集合
01
集合的创建
集合(set)与数学中集合的概念一致,即包含0个或多个数据项的无序组合。
集合中的元素不可重复
元素类型只能是固定数据类型,如整数、浮点数、字符串、元组等
不能是列表、字典和集合等可变数据类型
Python提供了一个内置函数hash()来计算对象的哈希值,凡是无法计算哈希值(调用内置函数hash()时抛出异常)的对象都不能作为集合的元素,也不能作为字典对象的“键”。
>>>hash('Python') #计算字符串的哈希值
-5336376190899570360
>>>hash(1) #计算整型数据的哈希值
1
>>>hash([1,2,3]) #计算列表的哈希值,抛出异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
02
集合的创建
创建集合的方式很简单,只需将逗号分隔的不同元素使用大括号括起来即可。
例如:
>>>a_set = {1, 2, 3, 4} #创建集合并赋值
>>>a_set #输出集合a_set
{1, 2, 3, 4}
>>>b_set = {2, 1, 3, 4, 1, 2} #创建集合并赋值
>>>b_set #输出集合b_set
{1, 2, 3, 4}
由于集合元素是无序的,集合的打印效果与定义顺序可以不一致,且由于集合元素独一无二,使用集合类型能够过滤掉重复元素。
1.直接创建
03
集合的创建
2.使用set()函数
set()函数:将列表、元组等其他类型的数据转换为集合,如果原来的数据中存在重复元素,则在转换为集合时会将其删除。
例如:
>>>x = set('runoob') #将字符串转换为集合
>>>x #输出集合x
{'o', 'u', 'n', 'b', 'r'}
>>>y = set(['g', 'o', 'o', 'g', 'l', 'e']) #将列表转换为集合
>>>y #输出集合y
{'g', 'o', 'e', 'l'}
>>>z = set() #空集合
>>>z #输出集合z
set()
04
集合的创建
提示
集合类型与其他类型最大的不同在于它不包含重复元素,因此,当需要对一维数据进行去重处理时,一般可通过集合来完成。
例:将输出数据去除重复项后输出。
stu_class = {
'Mary':'C',
'Jone':'Java',
'Lily':'Python',
'Tony':'Python'
} #定义字典并赋值
print('以下课程已被选择:')
for cla in set(stu_class.values()): #遍历字典所有的值,调用set()将列表转换为集合从而去除重复项
print(cla) #输出每个值
05
集合的基本操作
1.添加与删除集合元素
操作函数或方法 描 述
S.add(x) 如果数据项x不在集合S中,将x添加到S中
S.update(T) 合并集合T中的元素到当前集合S中,并自动去除重复元素
S.pop() 随机删除并返回集合中的一个元素,如果集合为空则抛出异常
S.remove(x) 如果x在集合S中,移除该元素;如果x不存在则抛出异常
S.discard(x) 如果x在集合S中,移除该元素;如果x不存在不报错
S.clear() 清空集合
06
集合的基本操作
>>>s = {1, 2, 3} #创建集合并赋值
>>>s.add(4) #添加元素
>>>s.update({4, 5, 6}) #更新当前集合,自动忽略重复元素
>>>s #输出集合
{1, 2, 3, 4, 5, 6}
>>>s.discard(5) #删除元素,不存在则忽略该操作
>>>s #输出集合
{1, 2, 3, 4, 6}
>>>s.remove(5) #删除元素,不存在则抛出异常
KeyError:5
>>>s.pop() #删除并返回一个元素
1
07
集合的基本操作
2.集合运算
内置函数len()、max()、min()、sorted()等也适用于集合,另外,Python集合还支持数学意义上的交集、并集、差集、补集等运算。
操 作 符 描 述
S&T 交集,返回一个新集合,包括同时在集合S和T中的元素
S|T 并集,返回一个新集合,包括集合S和T中的所有元素
S-T 差集,返回一个新集合,包括在集合S中但不在集合T中的元素
S^T 补集,返回一个新集合,包括集合S和T中的元素,但不包括同时在集合S和T中的元素
S<=T 如果S与T相同或S是T的子集,返回True,否则返回False,可以用S<T判断S是否是T的真子集
S>=T 如果S与T相同或S是T的超集,,返回True,否则返回False,可以用S>T判断S是否是T的真超集
08
集合的基本操作
>>>a_set = {1, 2, 3, 4, 5} #创建集合并赋值
>>>b_set = {1, 2, 6, 7, 8} #创建集合并赋值
>>>a_set & b_set #交集
{1, 2}
>>>a_set | b_set #并集
{1, 2, 3, 4, 5, 6, 7, 8}
>>>a_set - b_set #差集
{3, 4, 5}
>>>a_set ^ b_set #补集
{3, 4, 5, 6, 7, 8}
>>>x = {1, 2, 3} #创建集合并赋值
>>>y = {2, 3} #创建集合并赋值
>>>z = {1, 2, 4} #创建集合并赋值
>>>x >= y #y是否为x的子集
True
>>>x <= z #x是否为z的子集
False
感谢欣赏
$$null