前言
前两篇文章,我们学习了Python字典的基本用法和遍历字典的三种方式。
为了让小伙伴们不耗费多余的注意力,我们举的例子都尽可能的简单,不信你回去看看,字典键对应的值都是基本数据类型(字符串、数字等)。
其实,字典里键对应的值可以很复杂。
我们可以在字典中存储列表,在列表中存储字典,在字典中存储字典等等。
Python中几乎所有的数据类型,都可以存进字典里。
学习不是一日之功,需摆正心态,持之以恒,希望小伙伴们对学习一门语言抱有基本的耐心。
下面我们来开心地学习吧。
1.在字典里存储列表
1.1字典里不全是列表
笔者在大学的时候,需要学习四门基础专业课。
course = ['数据结构', '计算机网络', '计算机组成原理', '操作系统']
如果我们声明一个学生字典,则专业课列表应该在学生字典之中。
student = { 'name': 'kelvin', 'age': 18, 'course': ['数据结构', '计算机网络', '计算机组成原理', '操作系统']}
注:也可以用双引号包裹字符串(别的文章可不会提醒的这么详细)
这种情况下,要想访问课程列表,和我们讲的字典访问方法一毛一样(基础挺重要的):student['course']。
下面我们来打印这个学生的信息。
# 概述学生基本信息print('姓名:', student['name'], '年龄:', student['age'])print('课程信息如下:')for course in student['course']: print("" + course)
运行结果如下:
说明(看得懂代码可以跳过):
首先,我们创建了一个学生字典,字典里存储了学生的姓名、年龄和课程信息。姓名和年龄都是基本数据类型(一个字符串另一个数字),课程是列表结构。
然后,我们通过字典访问方法字典['键'],一下子就把姓名和年龄拿到并输出了。
最后,我们通过student['course']拿到了一个课程列表,但直接输出格式太不好看了,所以我们对其进行了遍历,依次输出学生要上的课程。
1.2字典里全是列表
还有一种字典里存列表的情况:键对应的值全是列表。
遇到这种情况心里可以偷着乐,因为循环遍历的时候格式会很好看(后文会有解释)。
学校老师需要每个学生的课程信息(因为有的人选课会不一样)。
这个时候把学生姓名做键(实际情况下是用学号,姓名会重复),以学生课程列表为值可以组成字典。
courses = { 'kelvin': ['数据结构', '计算机网络', '计算机组成原理', '操作系统'], 'vicky': ['xx经济学', '西方经济学', '统计学', '发展经济学']}
我们把多个学生的课程表打印输出。
for name, course in courses.items(): print(name + '同学所学课程:') for c in course: print("" + c)
因为每个键对应的都是列表,所以需要再使用一个for循环来遍历学生课程列表。
解释(看得懂代码可以跳过):
首先,使用外层for循环,依次将courses字典里的键和值分别赋值给变量name和course。
然后,name对应的值是个简单的字符串,所以我们直接打印输出了。
最后,遍历course列表,格式化地打印学生所学课程。
再注:字典里不全是字典也可以用双层循环,只不过我们需要加个if判断,如果值是列表才能进入到内层循环。
2.在字典里存储字典
字典里存储字典很像俄罗斯套娃。
循环(打开)一层字典后,面对的还是字典,真是让人惊喜又惊喜。
和在字典中存储列表一样,在字典里存储字典也有两种情况。
聪明的小伙伴已经猜到了:在字典里不全是字典和在字典里全是字典。
看着让人有点头晕(建议看下前面的小标题清醒一下)。
因为在字典里不全是字典比较简单(不理解的欢迎私信),所以我们重点讲讲在字典里全是字典的情况。
学校需要学生信息表(不是学生所上课程信息)。
如果要用字典来存储的话,可以这样。
students = { 'kelvin': { 'age': 18, 'course': ['数据结构', '计算机网络', '计算机组成原理', '操作系统'] }, 'vicky': { 'age': 19, 'course': ['xx经济学', '西方经济学', '统计学', '发展经济学'] }}
可以看到,外层students字典里面存储的依然是以学生姓名为键,学生其他信息为值的字典。
更过分地是学生其他信息里竟然还有个学生列表。
看我们怎么处理这些数据。
for name, student in students.items(): print("姓名: