什么是字典?
字典(Dictionary)是一种非常强大的数据结构,它以键值对的形式存储数据,类似于现实生活中我们使用的索引式字典,其中每个单词都有对应的释义。
在Python中,字典的键是唯一的,而值可以重复。允许我们通过键快速访问对应的值,而无需遍历整个集合,这在处理大量数据时非常高效。
字典的主要特点包括:
• 无序性:字典中的元素是无序的,不能像列表那样通过索引来访问。
• 动态性:字典的大小可以随时改变,可以添加、删除或修改元素。
• 键的唯一性:键必须是不可变类型,如字符串、数字或元组,且在同一个字典内必须唯一。
• 高效查找:由于字典内部使用哈希表实现,查找速度通常很快,时间复杂度为O(1)。
![](https://img-blog.csdnimg.cn/direct/87b0216fbf934848a5c2b147cccf44eb.png)
1、创建字典
# 1.1 创建一个空字典非常简单,只需使用大括号{}即可。
empty_dict = {}
empty_dict1 =dict()
print(empty_dict) # {}
print(empty_dict1) # {}
# 1.2 使用字面量创建字典
# 通过键值对的方式,我们可以一次性创建包含多个元素的字典。
'''
{key:value,key:value,key:value}
my_dict={key:value,key:value,key:value}'''
2、访问字典元素
# 2.1通过键(key)获取值,使用键来访问字典中的值,(key)必须是唯一的,和下标索引很像,使用[]。
score={"a":77,"b":100,"c":96,"d":89}
print(score["a"]) # key值为a,对应的value值为:77
print(type(score)) # <class 'dict'>
# 2.2访问键不存在时的处理,尝试访问不存在的键会引发KeyError。为了避免这种情况,可以使用get()方法。
score={"a":77,"b":100,"c":96,"d":89}
# print(score['f']) # KeyError: 'f'
print(score.get('f')) # 输出:None
print(score.get('f','Not found')) # 输出:Not found
print(score.get('a','Not found')) # 输出:77
# 2.3 keys(),values(),访问字典的全部键和值
keys=score.keys()
print(keys) # dict_keys(['a', 'b', 'c', 'd'])
print(score.values()) # 访问value值,输出:dict_values([77, 100, 96, 89])
3、修改字典
# 3·1添加新键值对,可以通过赋值操作添加新的键值对。
# 语法:字典[key]=Value
score["e"]=68
print(score) # {'a': 77, 'b': 100, 'c': 96, 'd': 89, 'e': 68}
# 3·2更新元素,字典被修改,元素被更新
# 语法:字典[key]=Value,因为字典key不可以重复,所以对已经存在的key执行更新,就是更新Value值
score1={"a":77,"b":100,"a":96,"d":89}
print(score1) # {'a': 96, 'b': 100, 'd': 89}
4、删除字典元素
# 4·1 pop()方法:删除指定键的键值对并返回其值。如果键不存在,可以提供一个默认值。
score_1={"a":77,"b":100,"c":96,"张三":89}
del_score=score_1.pop("b")
print(f"删除\"b\"后,字典{score_1},输出的结果为{del_score}") # 删除"b"后,字典{'a': 77, 'c': 96, 'd': 89},输出的结果为100
# 4.2 del关键字:使用del关键字可以删除整个键值对。
del score_1['张三']
print(score_1) # {'a': 77, 'c': 96}
# 4.3 clear()方法:删除字典中的所有元素,输出;空字典
score_1.clear()
print(score_1) # {}
5、遍历字典
# 5.1 遍历键:for key in 字典.keys()
stu_score={"小明":10,"小兰":20,"小红":30,"小白":40}
for key in stu_score.keys():
print(key)
'''
小明
小兰
小红
小白
我们在这里发现,输出的value与key对应,似乎是有序的,与前面的无序性特点不一致,这是因为:在python中,从版本3.7开始,
所有的字典都是有序的,无序特意指定有序字典,意味着它们会保持元素被插入时的顺序。这一变化使得每个字典在用途上可以被看作是有序字典。
'''
# 5·2 遍历值:for value in 字典.values()
stu_score={"小明":10,"小兰":20,"小红":30,"小白":40}
for value in stu_score.values():
print(value)
'''
10
20
30
40
'''
# 5.3 遍历键值对:for key,value in 字典.items()
stu_score={"小明":10,"小兰":20,"小红":30,"小白":40}
for key,value in stu_score.items():
print(f'{key}: {value}')
'''
小明: 10
小兰: 20
小红: 30
小白: 40
'''
6、字典的嵌套
#字典的值可以是任何类型的数据,包括另一个字典,这就是所谓的嵌套字典。
6.1创建嵌套字典:让我们创建一个包含学生信息的嵌套字典。每个学生有姓名、年龄和课程成绩等信息:
students = {
'Alice': {'age': 20, 'grades': {'math': 90, 'science': 85, 'history': 88}},
'Bob': {'age': 21, 'grades': {'math': 78, 'science': 92, 'history': 80}},
'Charlie': {'age': 19, 'grades': {'math': 85, 'science': 79, 'history': 91}}
}
6.2 访问和更新嵌套字典元素
# 访问学生信息:我们可以通过多层索引来访问和更新嵌套字典中的元素
print(students['Alice']['age']) # 输出:20
print(students['Bob']['grades']['science']) # 输出:92
# 更新学生信息
students['Alice']['age'] = 21
students['Bob']['grades']['history'] = 85
# 添加新学生信息:添加新元素和遍历嵌套字典,只需为字典添加新的键值对,而遍历嵌套字典则可以使用嵌套的循环结构:
##添加新学生
students['David'] = {'age': 22, 'grades': {'math': 95, 'science': 88, 'history': 84}}
6.3 遍历字典
for name, value in students.items():
print(f"Name: {name}")
print(f"Age: {value['age']}")
print("Grades:")
for subject, grade in value['grades'].items():
print(f"{subject}: {grade}")
print()
'''
Name: Alice
Age: 21
Grades:
math: 90
science: 85
history: 88
Name: Bob
Age: 21
Grades:
math: 78
science: 92
history: 85
Name: Charlie
Age: 19
Grades:
math: 85
science: 79
history: 91
Name: David
Age: 22
Grades:
math: 95
science: 88
history: 84
7、练习案例
有如下员工信息,使用字典(dict)完成数据的记录。
并通过for循环,对所有级别为1级的员工,级别上升1级,薪水增加1000元
姓名 部门 工资 级别
张三 科技部 3000 1
王五 市场部 6000 2
李杰 市场部 9000 3
刘明 科技部 5000 1
梁辉 市场部 7000 2
staff={"张三":{"部门":"科技部","工资":3000,"级别":1},
"王五":{"部门":"市场部","工资":6000,"级别":2},
"李杰":{"部门":"市场部","工资":9000,"级别":3},
"刘明":{"部门":"科技部","工资":5000,"级别":1},
"梁辉":{"部门":"市场部","工资":7000,"级别":2}}
print("全体员工当前信息如下:")
print(staff)
print("全体员工级别为1的员工完成升职加薪操作后,信息表更新如下:")
for key in staff:
if staff[key]["级别"]==1:
staff[key]["级别"]+=1
staff[key]["工资"]+=1000
print(staff)
'''
运行结果:
全体员工当前信息如下:
{'张三': {'部门': '科技部', '工资': 3000, '级别': 1}, '王五': {'部门': '市场部', '工资': 6000, '级别': 2}, '李杰': {'部门': '市场部', '工资': 9000, '级别': 3}, '刘明': {'部门': '科技部', '工资': 5000, '级别': 1}, '梁辉': {'部门': '市场部', '工资': 7000, '级别': 2}}
全体员工级别为1的员工完成升职加薪操作后,信息表更新如下:
{'张三': {'部门': '科技部', '工资': 4000, '级别': 2}, '王五': {'部门': '市场部', '工资': 6000, '级别': 2}, '李杰': {'部门': '市场部', '工资': 9000, '级别': 3}, '刘明': {'部门': '科技部', '工资': 6000, '级别': 2}, '梁辉': {'部门': '市场部', '工资': 7000, '级别': 2}}
进程已结束,退出代码为 0
'''