1. Python的字典
1.1. 字典的定义
在Python中,字典是一种key-value的数据类型,也是唯一的映射类型;字典还是另一种可变容器类型,且可存储任意类型对象,其中也可包括其他容器类型。字典的每个键值(key-value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,语法格式如下:
dictionary = {
key1 : value1,
key2 : value2,
......
keyN:valueN,
}
映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表。
例如,将每个学生的基本学号和姓名存到字典中,并打印出来。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print(students)
运行结果:
1 {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘}
1.2 字典的特性
字典的特性有:
(1)字典是无序的。
(2)字典的键key必须是唯一的,所以字典中不存在重复数据。
(3)键key与值value用冒号“:”分开。
(4)项与项用逗号“,”分开。
1.3 字典中值的访问
在Python中,由于字典是一系列键-值对。每个键都与一个值关联,我们可以使用键来访问其相关联的值,这些值可以是数字、字符串、列表乃至字典等,即可将Python中的任何对象作为字典中的值。
因此,在Python中,我们通过以下方式访问字典中的值:
字典名[键]
例如,我们将学生的学号和姓名存到字典中,然后取出学为S100003的学生的姓名。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print(students[‘S100003‘])
说明:
第8行,由于我们将学号作为学生字典的key,故通过学号即可访问字典中对应的值。此处我们使用学号‘S100003’取出相应的值,并将其打印出来。
运行结果:
1 Yu Bao
1.4 字典的增、删、改操作
在Python中,由于字典的动态性,我经常需要对其进行键-值对的增、删、改。
1.4.1 字典的键-值对增加
在Python中,字典是一种动态结构,可随时在其中增加我们需要的键-值对。当我们要往字典中增加键-值对时,可依次指定字典名、用方括号括起来的键和其关联的值。其格式如下:
dictionary [kek] = value
例如,我们创建一个空的字典,然后将学生的学号作为键,姓名作为其对应的值,并将其增加到该空字典中。
代码:
1 students = {} 2 students[‘S100001‘] = "Yun Qtian" 3 students[‘S100002‘] = "Feng Kuang" 4 students[‘S100003‘] = "Yu Bao" 5 students[‘S100004‘] = "Dian Lei" 6 students[‘S100005‘] = "Yu Xiao" 7 print(students)
说明:
第1行,定义一个空字典students。
第2~6行分别将学号即其对应的学生的姓名增加到空列表students中。
第7行,打印增加键-值对后的字典。
运行结果:
1 {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘}
1.4.2 字典键-值对的删除
在Python中,对于字典中不再需要的信息,可使用del语句将其从字典中删除。使用del语句时,必须指定字典名和删除的键。del 语句删除字典中的键-值对的信息的语法格式为:
del dictionary [key]
例如,由于学生S100005转学了,我们需要将期从字典students中删。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print("删除前的字典:",students) 9 del students[‘S100005‘] 10 print("删除后的字典:",students)
说明:
第9行,使用del语句删除字段students中的学号为S100005的信息。
运行结果:
1 删除前的字典: {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘} 2 删除后的字典: {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘}
从以上的运行结果中,可知,我们删除的键-值对,永久从字典中删除,但不会影响到其他的键-值对。
1.4.2 字典键-值对的修改
在Python中,要修改字典中的值,可依次指定字典名、用方括号括起来的键,以及该键对应的新值。其语法格式为:
dictionary [key] = value
例如,我们将已有字典中学号为S100005的姓名改为“Yu Da”。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print("修改前的字典:",students) 9 students[‘S100005‘] = "Yu Da" 10 print("修改后的字典:",students)
说明:
第9行,将字典students中学号为S100005的姓名改为“Yu Da”。
运行结果:
1 修改前的字典: {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘} 2 修改后的字典: {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Da‘}
1.5 字典的遍历
在Python中,一个字典可能包含几个键-值对,也可能包含数百万个键-值对。鉴于字典可能包含大量数据,Python支持对字典进行遍历。由于字典可以用于存储个汇总给形式的信息,因此,对字典的遍历方式也有多种:可遍历字典的所有键-值对、键或值等。
1. 5.1 遍历字典中的所有键-值对
在Python中,我们可以使用for循环遍历字典中的所有键-值对。
例如,我们遍历字典students重点额所有学生的学号和姓名。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print(students) 9 print(‘----第一种遍历方式----‘) 10 for student in students: 11 print(student,students[student]) 12 print(‘----第二种遍历方式----‘) 13 for key,value in students.items(): 14 print(key,value)
说明
第10行,用for循环对字典students进行遍历,每次遍历的键-值对存到变量student中。
第11行,打印每次循环的键-值对。
第13行,用for循环对字典students进行遍历,每次遍历的键和值分别存到变量key和value中。
第14行,打印每次循环的键和值。
运行结果:
1 {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘} 2 ----第一种遍历方式---- 3 S100001 Yun Qtian 4 S100002 Feng Kuang 5 S100003 Yu Bao 6 S100004 Dian Lei 7 S100005 Yu Xiao 8 ----第二种遍历方式---- 9 S100001 Yun Qtian 10 S100002 Feng Kuang 11 S100003 Yu Bao 12 S100004 Dian Lei 13 S100005 Yu Xiao
1. 5.2 遍历字典中的所有的键
在Python中,当我们需要使用字典中的键时,方法keys()很有用,它可以从字典中提取出所有的键。
例如,打印字典中所有学生的学号。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print(students) 9 print("学生的学号如下:") 10 print("----第一种方式-----") 11 for student_no in students.keys(): 12 print(student_no) 13 print("----第二种方式-----") 14 for _student_no in students: 15 print(_student_no)
说明:
第11行,在for循环中,使用方法keys()读取字典students中的中所有key,并存于变量student_no中。
第14行,在for循环中,将每次循环的值存到变量_student_no中。
运行结果:
1 {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘} 2 学生的学号如下: 3 ----第一种方式----- 4 S100001 5 S100002 6 S100003 7 S100004 8 S100005 9 ----第二种方式----- 10 S100001 11 S100002 12 S100003 13 S100004 14 S100005
从以上的运行结果,我们可知,在Python中,当我遍历字典时,Python解释器会默认遍历所有的键,因此,两种循环遍历的输出结果都是一致的。只是使用keys()方法可以让代码更容易理解。
1. 5.3 遍历字典中的所有的值
在Python中,有时我们只需要输出字典的值,不关注键,此时,我们可以使用方法values(),该方法即可放回一个值列表,而不包含任何键。
例如,我们打印字典中的学生的姓名。
代码:
1 students ={ 2 ‘S100001‘:"Yun Qtian", 3 ‘S100002‘:"Feng Kuang", 4 ‘S100003‘:"Yu Bao", 5 ‘S100004‘:"Dian Lei", 6 ‘S100005‘:"Yu Xiao", 7 } 8 print(students) 9 print("学生的姓名如下:") 10 print("----第一种方式-----") 11 for student_name in students.values(): 12 print(student_name) 13 print("----第二种方式-----") 14 for kek in students.keys(): 15 print(students[kek])
说明:
第11行,在for循环中,调用方法values()从字典中读取字典的值,并存于变量student_name中。
第14行,在for循环中,调用方法keys()从字典中读取字典的键,并存于变量key中。
第15行,通过每次取到的key访问字典的值。
运行结果:
1 {‘S100001‘: ‘Yun Qtian‘, ‘S100002‘: ‘Feng Kuang‘, ‘S100003‘: ‘Yu Bao‘, ‘S100004‘: ‘Dian Lei‘, ‘S100005‘: ‘Yu Xiao‘} 2 学生的姓名如下: 3 ----第一种方式----- 4 Yun Qtian 5 Feng Kuang 6 Yu Bao 7 Dian Lei 8 Yu Xiao 9 ----第二种方式----- 10 Yun Qtian 11 Feng Kuang 12 Yu Bao 13 Dian Lei 14 Yu Xiao
1.6 嵌套
在Python中,有时我们需要将一系列字典存储在列表中,或将列表作为值存储到字典中,这就是所谓的嵌套。嵌套是一项强大的功能,我们可以在列表中嵌套字典、在字典中嵌套列表,也可以在字典中嵌套字典等。
1.6.1 字典列表
字典列表,即由字典组成的列表,或者说在空列表中嵌套字典。
例如,我们先创建一个空列表,再分别三个字典,然后将该三个字典嵌套到列表中。
代码:
1 students_list = [] 2 students_1 = { 3 ‘student_no‘:"S100001", 4 ‘sex‘:"M", 5 ‘age‘:"20" 6 } 7 students_2 = { 8 ‘student_no‘:"S100002", 9 ‘sex‘:"M", 10 ‘age‘:"21" 11 } 12 students_3 = { 13 ‘student_no‘:"S100003", 14 ‘sex‘:"F", 15 ‘age‘:"18" 16 } 17 students_list.append(students_1) 18 students_list.append(students_2) 19 students_list.append(students_3) 20 print(students_list) 21 for student in students_list: 22 print(student)
说明:
第1行,创建一个空列表students_list 。
第2~6行,创建第一个字典student_1。
第7~11行,创建第二个字典student_2。
第12~16行,创建第三个字典student_3。
第17~19行,分别将创建的三个字典增加到创建的空列表中。
第21~22行,循环打印该列表的元素。
运行结果:
1 [{‘student_no‘: ‘S100001‘, ‘sex‘: ‘M‘, ‘age‘: ‘20‘}, {‘student_no‘: ‘S100002‘, ‘sex‘: ‘M‘, ‘age‘: ‘21‘}, {‘student_no‘: ‘S100003‘, ‘sex‘: ‘F‘, ‘age‘: ‘18‘}] 2 {‘student_no‘: ‘S100001‘, ‘sex‘: ‘M‘, ‘age‘: ‘20‘} 3 {‘student_no‘: ‘S100002‘, ‘sex‘: ‘M‘, ‘age‘: ‘21‘} 4 {‘student_no‘: ‘S100003‘, ‘sex‘: ‘F‘, ‘age‘: ‘18‘}
1.6.2 在字典中存储列表
在Python中,有时我们需要将列表存于字典,而不是将字典存于列表。
例如,我们创建一个空字典,然后分别创建三个列表,并将其存于字典中。
代码:
1 students = {} 2 student_list1 =["S100001","M","20"] 3 student_list2 =["S100002","M","21"] 4 student_list3 =["S100003","F","18"] 5 students[student_list1[0]] = student_list1 6 students[student_list2[0]] = student_list2 7 students[student_list3[0]] = student_list3 8 print(students) 9 for value in students.values(): 10 print(value) 11 for _students in value: 12 print(_students)
说明:
第1行,创建一个空字典students。
第2~4行,分别创建一个不同的列表。
第5~7行,以每个学生的学号为key,列表的值为value分别向空字典中增加键-值对。
第8行,打印嵌套后的字典。
第9~10行,循环打印字典的值。
第11~12行,循环打印被嵌套的列表的每个元素。
运行结果:
1 {‘S100001‘: [‘S100001‘, ‘M‘, ‘20‘], ‘S100002‘: [‘S100002‘, ‘M‘, ‘21‘], ‘S100003‘: [‘S100003‘, ‘F‘, ‘18‘]} 2 [‘S100001‘, ‘M‘, ‘20‘] 3 S100001 4 M 5 20 6 [‘S100002‘, ‘M‘, ‘21‘] 7 S100002 8 M 9 21 10 [‘S100003‘, ‘F‘, ‘18‘] 11 S100003 12 F 13 18
在Python中,列表和字典的嵌套层级不应太多。如果嵌套层级非常多,很可能有更简单的解决方案。
1.6.3 在字典中存储字典
在Python中,我们虽然可以在字典中嵌套字典,但这样也许会让代码很快就复杂起来。
例如,我们将每个学生的基本信息作为一个字典,然后再存到一个总的字典中。
代码:
1 students ={ 2 "S100001":{ 3 "sex":"M", 4 "age":"20", 5 }, 6 "S100002": { 7 "sex": "M", 8 "age": "21", 9 }, 10 "S100003": { 11 "sex": "F", 12 "age": "18", 13 }, 14 } 15 print(students) 16 for key,value in students.items(): 17 print(key,value["sex"],value["age"])
说明:
第1~14行,创建一个字典students,其中第2~5行为字典students的一个键-值对,而第3~4行又是键-值对字典的一个键-值对,字典students的其余两个键-值对也类似。
第15行,打印字典的键-值对。
第16~17行,循环打印字典中的每个键-值对的具体值。
运行结果:
1 {‘S100001‘: {‘sex‘: ‘M‘, ‘age‘: ‘20‘}, ‘S100002‘: {‘sex‘: ‘M‘, ‘age‘: ‘21‘}, ‘S100003‘: {‘sex‘: ‘F‘, ‘age‘: ‘18‘}} 2 S100001 M 20 3 S100002 M 21 4 S100003 F 18
到此为止,Python的字典学习就完成了。