文章目录
- 【4.6】数据容器:dict 字典、映射
- 一、字典的定义
- 二、字典的常用操作
- 三、字典的遍历
- 四、字典的特点
【4.6】数据容器:dict 字典、映射
一、字典的定义
为什么使用字典
以生活中的新华字典举例。它的功能是,让我们通过【字】
,就能找到对应的【含义】
。
所以,我们可以认为,生活中的字典,就是一系列的:
【字】:含义
【字】:含义
【字】:含义
...
【字】:含义
Python中的字典和生活中实际的字典很相似。它的功能是,让我们通过【Key】
,找出对应的【Value】
。
# Python中的字典
Key: Value
Key: Value
...
Key: Value
老师有一份名单,记录了学生的姓名和考试成绩。
姓名 | 成绩 |
---|---|
张三 | 77 |
李四 | 88 |
王五 | 99 |
现在需要将其通过Python录入至程序中,并可以通过学生姓名检索学生的成绩。
使用字典最为合适:
{
"张三": 77,
"李四": 88,
"王五": 99
}
可以通过Key(学生姓名),取到对应的Value(考试成绩)。
综上,为什么使用字典?
答:使用字典,可以实现用Key取出Value的操作。
字典的定义
字典的定义,同样使用{}
,不过存储的元素是一个个的键值对,如下:
# 定义字典字面量
{key: value, key: value, ..., key: value}
# 定义字典变量
my_dict = {key: value, key: value, ..., key: value}
# 定义空字典
my_dict = {} # 方式1
my_dict = dict() # 方式2
注意,字典内Key不允许重复,若重复,则检索时返回的是位于最后边的Key的Value值。(很好理解,字典里有两个相同的字,但是是不同的释义,我查字典的时候该认准哪个?)
字典数据的获取
字典同集合一样,不可以使用下标索引。
但是字典可以通过Key值来取得对应的Value。
# 语法
# 字典[key] 可以取到对应的 Value
stu_score = {"张三": 77, "李四": 88, "王五": 99}
print(stu_score["张三"]) # 77
print(stu_score["李四"]) # 88
print(stu_score["王五"]) # 99
字典的嵌套
字典的Key和Value可以是任意数据类型。(注意:Key不可为字典)
这就表明,字典是可以嵌套的。
需求如下:记录学生各科的考试信息。
姓名 | 语文 | 数学 | 英语 |
---|---|---|---|
张三 | 77 | 66 | 33 |
李四 | 88 | 86 | 55 |
王五 | 99 | 96 | 66 |
# 定义嵌套字典
stu_score_dict = {
"张三": {
"语文": 77,
"数学": 66,
"英语": 33
},
"李四": {
"语文": 88,
"数学": 86,
"英语": 55
},
"王五": {
"语文": 99,
"数学": 96,
"英语": 66
}
}
print(stu_score_dict["张三"]["语文"]) # 77
二、字典的常用操作
- 新增元素
# 语法
字典[Key] = Value
字典被修改,新增了元素。
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
# 新增stu04的成绩
stu_score["stu04"] = 66
print(stu_score)
- 更新元素
# 语法
字典[Key] = Value
字典被修改,元素被更新。
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
# 更新stu02的成绩
stu_score["stu02"] = 66
print(stu_score)
注意:虽然语法上来看都是字典[Key] = Value
,但区别在于,Key若是已存在的,则为更新操作;Key若是未存在的,则为新增操作。(因为字典里的Key是不可重复的)
- 删除元素
# 语法
字典.pop(Key)
获得指定Key的Value,同时字典被修改,其中指定Key的数据被删除。
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
value = stu_score.pop("stu02")
print(value) # 88
print(stu_score) # {'stu01': 77, 'stu03': 99}
- 清空字典
# 语法
字典.clear()
字典被修改,元素被清空。
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
stu_score.clear()
print(stu_score) # {}
- 获取全部Key
# 语法
字典.keys()
得到字典中的全部Key。(可以用来做字典遍历)
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
keys = stu_score.keys()
print(keys) # dict_keys(['stu01', 'stu02', 'stu03'])
- 统计字典内的元素数量
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
num = len(stu_score)
print(num) # 3
三、字典的遍历
方式1:借助“获取全部key”的功能
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
keys = stu_score.keys()
print(keys) # dict_keys(['stu01', 'stu02', 'stu03'])
for k in keys:
print(f"字典的key是:{k}")
print(f"字典的value是:{stu_score[k]}")
方式2:直接对字典进行for循环
对字典进行for循环,每一个取出的临时变量都是字典的一个key。
stu_score = {
"stu01": 77,
"stu02": 88,
"stu03": 99
}
for k in stu_score:
print(f"字典的key是:{k}")
print(f"字典的value是:{stu_score[k]}")
字典不支持下表索引,所以也不能使用while循环做遍历。
四、字典的特点
字典有如下特点:
- 可以容纳多个数据;
- 可以容纳不同类型的数据;
- 每一份数据都是KeyValue键值对;
- 可以通过Key获取到Value,Key不可重复(重复会覆盖);
- 不支持下标索引;
- 可以修改;
- 支持for循环。