内容正文:
专题八 Python 字典
[考纲要求]
1.了解字典的键值对特性
2.掌握字典的创建
3.掌握字典键值对查询、修改、删除、添加
4.掌握字典的函数
[课时安排]
2课时
[知识梳理]
字典
字典的定义
字典(dict)是由一组键(key)及与其对应的值构成的,键与对应的值之间用冒号分隔,键与值放置在一对花括号内。在同一个字典中,键与值之间存在一一对应的关系(映射关系)。键的作用相当于索引,每个键对应的值就是数据。字典属于可变数据类型,在字典中的值可以包含任何数据类型。
字典的语法结构:
字典名={键1:值1,键2:值2,键3:值3…}
创建字典
1. 创建空字典
方法1:将空字典赋值给变量
dict1 = {}
方法2:使用dict()函数创建
dict2 = dict()
2. 创建非空字典
通过dict()函数创建,dict()函数需要传入列表且列表内的元素是元组的形式
dict2 = dict([("name", "张三"), ("age", 18)])
print(dict2) # {'name': '张三', 'age': 18}
将'键=值'的形式传入dict()函数内,需要注意的是键不能使用引号
dict3 = dict(name="张三", age=18)
print(dict3) # {'name': '张三', 'age': 18}
通过dict()函数将列表、元组、集合转为字典
>>> lst=[(1,2),(3,4),(5,6)]
>>> dict(lst)
{1: 2, 3: 4, 5: 6}
>>> tup1=((1,2),(3,4),(5,6))
>>> dict(tup1)
{1: 2, 3: 4, 5: 6}
>>> set1={(1,2),(3,4)}
>>> dict(set1)
{1: 2, 3: 4}
字典的特性
1. 键必须是不可变的数据类型,且不可变数据的内部也不能包含可变的数据类型。
>>> dic1={"name":"张三","age":18}
>>> dic1
{'name': '张三', 'age': 18}
>>> dic2={[1,2]:"张三",'age':18}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
可变的数据类型:列表、字典、集合(可变集合)
不可变的数据类型:数值、字符串、元组
2. 键是唯一的,不能重复。如果创建字典时键重复了,后面重复的键和值,会覆盖前面的键值对。
dict1 = {"name": "张三", "age": 18, "name": "李四"}
print(dict1["name"]) # 李四
3. 字典的键值对是无序的,因此不支持索引(字典里面是通过键取到对应的值)和切片
>>> dic={1:2,3:4}
>>> dic[1:3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'slice’
总结:字典的键遵循集合的三大特征
但是字典的值可以是任意的数据类型,也可以重复。不受任何限制
字典的基本操作
1.访问字典的值 字典对象[“键”]
dict1 = {"name": "张三", "age": 18}
print(dict1["name"]) # 张三
当字典的键是元组时
dict1 = {('name', "姓名"): '张三', 'age': 18}
print(dict1[('name', "姓名")]) # 张三
# 也可以使用元组内的元素(不推荐)
print(dict1['name', "姓名"]) # 张三
当字典的值是列表、元组、字典时
字典的值是元组时
dict1 = {'name': '张三', 'age': 18, 'info': (180, 75)}
print(dict1["info"][0]) # 180
字典的值是列表时
dict1 = {'name': '张三', 'age': 18, 'info': [180, 75]}
print(dict1["info"][1]) # 75
# 字典的值是字典时
dict1 = {'name': '张三', 'age': 18, 'info': {"height": 180, "weight": 75}}
print(dict1["info"]["height"]) # 180
2.修改字典的值 字典对象[“键”]=新的值
dict1 = {"name": "张三", "age": 18}
dict1["age"]=19
print(dict1) # {'name': '张三', 'age': 19}
字典的值是元组时
dict1 = {'name': '张三', 'age': 18, 'info': (180, 75)}
dict1["info"] = (185, 75) # 将元组看成整体
print(dict1)
不能使用dict1["info"][0]=185来修改
字典的值是列表时
dict1 = {'name': '张三', 'age': 18, 'info': [180, 75]}
dict1["info"][0]=185
print(dict1["info"]) # [185, 75]
字典的值是字典时
dict1 = {'name': '张三', 'age': 18, 'info': {"height": 180, "weight": 75}}
dict1["info"]["height"] = 185
print(dict1["info"]) # {'height': 185, 'weight': 75}
如果字典的值是不可变的数据类型就不能修改,不可变的数据类型不能修改的。
3.增加字典的键值对 字典对象[“新的键”]=新的值
dict1 = {"name": "张三", "age": 18}
dict1["weight"] = 75
print(dict1) # {'name': '张三', 'age': 18, 'weight': 75}
4.删除字典的键值对 del 字典对象[“键”]
dict1 = {'name': '张三', 'age': 18, 'weight': 75}
del dict1["weight"]
print(dict1) # {'name': '张三', 'age': 18}
字典的操作函数
1.dict.keys( ) 用于获取dict中所有键(可迭代对象)
>>> dic1={"name":"张三","age":18}
>>> dic1.keys()
dict_keys(['name', 'age'])
>>> list(dic1.keys()) # [‘name’,’age’]
2.dict.values() 用于获取dict中所有值(可迭代对象)
>>> dic1={"name":"张三","age":18}
>>> dic1.values()
dict_values(['张三', 18])
3.dict.items() 用于获取dict中所有的(键,值)元组(可迭代对象)
>>> dic1={"name":"张三","age":18}
>>> dic1.items()
dict_items([('name', '张三'), ('age', 18)])
4.dict.get(key[,value]) 用于从dict中获取键为key对应的值,如果dict中存在key就会返回key对应的值,如果不存在key,则会返回None,如果给定了value,就会返回给的value值
>>> dic={1:2,3:4,5:6}
>>> dic.get(3,7)
4
>>> dic.get(6,7)
7
>>> dic.get(6) # 不指定值则默认返回None值
5.dict.clear()用于删除字典dict中的所有元素使dict变成一个空字典
>>> dic={1:2,3:4,5:6}
>>> dic.clear()
>>> dic
{}
6.dict.setdefault(key[,value]).如果字典dict中存在key,则该方法返回key对应的值,否则在字典dict中添加key:value,并返回value的值,value默认为None
>>> dic={1:2,3:4,5:6}
>>> dic.setdefault(3,7)
4
>>> dic.setdefault(6,7)
7
>>> print(dic)
{1: 2, 3: 4, 5: 6, 6: 7}
7.dict.update(dict2) 用于将字典dict2中的元素添加到字典dict中
>>> dic={1:2,3:4}
>>> dic.update({3:5})
>>> dic
{1: 2, 3: 5}
>>> dic.update({6:7})
>>> dic
{1: 2, 3: 5, 6: 7}
检查键是否存在于字典中
每个键及其对应的值就是字典中的一个元素,可以使用in运算符检测键是否存在于字典中。例如:
>>> dict1={1:"A",2:"B",3:"C"}
>>> 1 in dict1
True
>>> 4 in dict1
False
dic = {1: 2, 3: 4, 5: 6}
print(1 in dic.values()) # False
print(2 in dic.values()) # True
print(3 in dic.keys()) # True
print(5 in dic.items()) # 5 in [(1,2),(3,4),(5,6)] --> False
获取键的列表和字典长度
dict1 = {'name': '张三', 'age': 18, "height": 180, "weight": 75}
使用列表的函数list()可以将字典的键转为列表等价于 字典对象.keys( )
print(list(dict1)) # ['name', 'age', 'height', 'weight']
print(list(dict1.keys())) # ['name', 'age', 'height', 'weight']
如果想获取字典的值组成的列表,就需要使用 字典对象.values( )来获取
print(list(dict1.values())) # ['张三', 18, 180, 75]
如果想获取字典的键值组成的列表,就需要使用 字典对象.items( )来获取
print(list(dict1.items())) # [('name', '张三'), ('age', 18), ('height', 180), ('weight', 75)]
使用函数len( )获取字典的长度。一个键值对为一个元素
print(len(dict1)) # 4
[限时练习]
1.下面代码的运行结果__________
lst=[(1,2),(3,4)]
print(dict(lst))
【答案】{1: 2, 3: 4}
【解析】通过dict()函数将列表里面的二元组转为键值对
2. print(dict(w=1,h=2))的运行结果__________
【答案】{'w': 1, 'h': 2}
【解析】将"键=值"的数据类型转为键值对
3.下面代码的运行结果__________
dic={1:2,3:4,5:6}
print(dic.keys())
【答案】dict_keys([1, 3, 5])
【解析】获取字典的键,返回的是dict_keys对象
4.下面代码的运行结果__________
dic={1:2,3:4,5:6}
print(dic.values())
【答案】dict_values([2, 4, 6])
【解析】获取字典的值,返回的是dict_values对象
5.下面代码的运行结果__________
dic={1:2,3:4,5:6}
print(dic.items())
【答案】dict_items([(1, 2), (3, 4), (5, 6)])
【解析】获取字典的键值对,返回的是dict_items对象
6.下面代码的运行结果__________
dic={1:2,3:4,5:6}
print(dic.get(7))
【答案】None
【解析】7不在字典的键里面,因此返回后面的值,未指定值则默认返回None。
7.下面代码的运行结果__________
dic={1:2,3:4}
dic.clear()
print(dic)
【答案】{}
【解析】清空字典的键值对
8.下面代码的运行结果__________
dic={1:2,3:4}
dic.setdefault(5,6)
print(dic)
【答案】{1: 2, 3: 4, 5: 6}
【解析】setdefault()函数与get()函数几乎相同,唯一不同的是键不在字典内,则会将键值对添加到字典里面
9.下面代码的运行结果__________
dic={1:2,3:4}
dic.update({3:5})
print(dic)
【答案】{1: 2, 3: 5}
【解析】dic.update(dic1)函数,若dic1里面的键在dic里面则会更新对应的值
10.下面代码的运行结果__________
dic={1:2,3:4}
dic.update({5:6})
print(dic)
【答案】{1: 2, 3: 4, 5: 6}
【解析】dic.update(dic1)函数,若dic1里面的键不在dic里面则会添加到字典dic里面
11.下面代码的运行结果__________
dic={1:2,3:4,5:6}
print(dic.get(1,4)+dic.get(6,7))
【答案】9
【解析】dic.get(1,4)由于1在字典dic里面,因此返回2 dic.get(6,7)由于6不在字典dic里面,因此返回后面指定的值7 最后的结果为9
12.下面代码的运行结果__________
dic={"name":"张三","age":18}
dic['age']=19
dic['height']=180
print(dic)
【答案】{'name': '张三', 'age': 19, 'height': 180}
【解析】dic['age']=19将键age对应的值改为19,dic['height']=180添加新的键值对
[归纳小结]
学科网(北京)股份有限公司
$$