Python的字典

Posted 晴天云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的字典相关的知识,希望对你有一定的参考价值。

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的字典学习就完成了。

  

     

 

以上是关于Python的字典的主要内容,如果未能解决你的问题,请参考以下文章

Python snippet(代码片段)

Python代码阅读(第26篇):将列表映射成字典

Python代码阅读(第40篇):通过两个列表生成字典

Python代码阅读(第38篇):根据谓词函数和属性字符串构造判断函数

常用python日期日志获取内容循环的代码片段

python 有用的Python代码片段