Python字典嵌套

系统 1650 0

文 | 猿天罡

前言

前两篇文章,我们学习了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
              
              
                (
              
              
                "\t"
              
              
                +
              
               course
              
                )
              
            
          

运行结果如下:

Python字典嵌套_第1张图片

说明(看得懂代码可以跳过):

首先,我们创建了一个学生字典,字典里存储了学生的姓名、年龄和课程信息。姓名和年龄都是基本数据类型(一个字符串另一个数字),课程是列表结构。

然后,我们通过字典访问方法 字典['键'] ,一下子就把姓名和年龄拿到并输出了。

最后,我们通过 student['course'] 拿到了一个课程列表,但直接输出格式太不好看了,所以我们对其进行了遍历,依次输出学生要上的课程。

1.2字典里全是列表

还有一种字典里存列表的情况:键对应的值全是列表。

遇到这种情况心里可以偷着乐,因为循环遍历的时候格式会很好看(后文会有解释)。

学校老师需要每个学生的课程信息(因为有的人选课会不一样)。

这个时候把学生姓名做键(实际情况下是用学号,姓名会重复),以学生课程列表为值可以组成字典。

            
              courses 
              
                =
              
              
                {
              
              
                'kelvin'
              
              
                :
              
              
                [
              
              
                '数据结构'
              
              
                ,
              
              
                '计算机网络'
              
              
                ,
              
              
                '计算机组成原理'
              
              
                ,
              
              
                '操作系统'
              
              
                ]
              
              
                ,
              
              
                'vicky'
              
              
                :
              
              
                [
              
              
                'xx经济学'
              
              
                ,
              
              
                '西方经济学'
              
              
                ,
              
              
                '统计学'
              
              
                ,
              
              
                '发展经济学'
              
              
                ]
              
              
                }
              
            
          

我们把多个学生的课程表打印输出。

            
              
                for
              
               name
              
                ,
              
               course 
              
                in
              
               courses
              
                .
              
              items
              
                (
              
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              name 
              
                +
              
              
                '同学所学课程:'
              
              
                )
              
              
                for
              
               c 
              
                in
              
               course
              
                :
              
              
                print
              
              
                (
              
              
                "\t"
              
              
                +
              
               c
              
                )
              
            
          

因为每个键对应的都是列表,所以需要再使用一个 for 循环来遍历学生课程列表。

解释(看得懂代码可以跳过):

首先,使用外层 for 循环,依次将courses字典里的键和值分别赋值给变量 name course

然后, name 对应的值是个简单的字符串,所以我们直接打印输出了。

最后,遍历 course 列表,格式化地打印学生所学课程。

再注:字典里不全是字典也可以用双层循环,只不过我们需要加个if判断,如果值是列表才能进入到内层循环。

2.在字典里存储字典

字典里存储字典就很像俄罗斯套娃。

Python字典嵌套_第2张图片

循环(打开)一层字典后,面对的还是字典,真是让人惊喜又惊喜。

和在字典中存储列表一样,在字典里存储字典也有两种情况。

聪明的小伙伴已经猜到了:在字典里不全是字典和在字典里全是字典。

看着让人有点头晕(建议看下前面的小标题清醒一下)。

因为在字典里不全是字典比较简单(不理解的欢迎私信),所以我们重点讲讲在字典里全是字典的情况。

学校需要学生信息表(不是学生所上课程信息)。

如果要用字典来存储的话,可以这样。

            
              students 
              
                =
              
              
                {
              
              
                'kelvin'
              
              
                :
              
              
                {
              
              
                'age'
              
              
                :
              
              
                18
              
              
                ,
              
              
                'course'
              
              
                :
              
              
                [
              
              
                '数据结构'
              
              
                ,
              
              
                '计算机网络'
              
              
                ,
              
              
                '计算机组成原理'
              
              
                ,
              
              
                '操作系统'
              
              
                ]
              
              
                }
              
              
                ,
              
              
                'vicky'
              
              
                :
              
              
                {
              
              
                'age'
              
              
                :
              
              
                19
              
              
                ,
              
              
                'course'
              
              
                :
              
              
                [
              
              
                'xx经济学'
              
              
                ,
              
              
                '西方经济学'
              
              
                ,
              
              
                '统计学'
              
              
                ,
              
              
                '发展经济学'
              
              
                ]
              
              
                }
              
              
                }
              
            
          

可以看到,外层students字典里面存储的依然是以学生姓名为键,学生其他信息为值的字典。

更过分地是学生其他信息里竟然还有个学生列表。

看我们怎么处理这些数据。

            
              
                for
              
               name
              
                ,
              
               student 
              
                in
              
               students
              
                .
              
              items
              
                (
              
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "姓名:"
              
              
                ,
              
               name
              
                ,
              
              
                ",年龄:"
              
              
                ,
              
               student
              
                [
              
              
                'age'
              
              
                ]
              
              
                ,
              
              
                ",所学课程:"
              
              
                )
              
              
                for
              
               course 
              
                in
              
               student
              
                [
              
              
                'course'
              
              
                ]
              
              
                :
              
              
                print
              
              
                (
              
              
                "\t"
              
              
                +
              
               course
              
                )
              
            
          

我们先来看看效果图:

Python字典嵌套_第3张图片

常规唠叨(看懂代码的可以跳过):

首先,我们定义了一个学生字典,里面有两个学生的信息。

学生信息是以姓名为键,其他信息为值。

然后,我们遍历最外层字典,然后依次将 students 的键和值赋值给变量 name student

接着,因为学生姓名赋值给了变量 name ,所以我们直接打印变量 name

学生的年龄信息存储在 student 字典(内层字典)里的,可以通过基本的字典访问方法 student['age'] 拿到并打印出来。

最后,遍历 student['course'] ,即课程列表,格式化输出所学课程。

3.在列表里存储字典

在列表里也可以存储字典哦。

列表和字典的主要区别是前者没有键而已。

这并不影响其存储能力,事实上,列表也几乎可以存储所有的数据类型。

除了用字典存储多个学生信息外,我们还可以用列表来存储。

            
              student1 
              
                =
              
              
                {
              
              
                'name'
              
              
                :
              
              
                'kelvin'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                18
              
              
                ,
              
              
                'course'
              
              
                :
              
              
                [
              
              
                '数据结构'
              
              
                ,
              
              
                '计算机网络'
              
              
                ,
              
              
                '计算机组成原理'
              
              
                ,
              
              
                '操作系统'
              
              
                ]
              
              
                }
              
              

student2 
              
                =
              
              
                {
              
              
                'name'
              
              
                :
              
              
                'vicky'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                19
              
              
                ,
              
              
                'course'
              
              
                :
              
              
                [
              
              
                'xx经济学'
              
              
                ,
              
              
                '西方经济学'
              
              
                ,
              
              
                '统计学'
              
              
                ,
              
              
                '发展经济学'
              
              
                ]
              
              
                }
              
              
students 
              
                =
              
              
                [
              
              student1
              
                ,
              
               student2
              
                ]
              
            
          

我们先是定义了两个学生字典,然后把它们存储到了 students 列表中了。

怎么遍历输出字典列表的信息呢?

            
              
                for
              
               student 
              
                in
              
               students
              
                :
              
              
                print
              
              
                (
              
              
                "姓名:"
              
              
                ,
              
               student
              
                [
              
              
                'name'
              
              
                ]
              
              
                ,
              
              
                ",年龄:"
              
              
                ,
              
               student
              
                [
              
              
                'age'
              
              
                ]
              
              
                ,
              
              
                ",所学课程:"
              
              
                )
              
              
                for
              
               course 
              
                in
              
               student
              
                [
              
              
                'course'
              
              
                ]
              
              
                :
              
              
                print
              
              
                (
              
              
                "\t"
              
              
                +
              
               course
              
                )
              
            
          

直接上运行结果:

Python字典嵌套_第4张图片

没人听的碎碎念(看得懂代码可以跳过):

首先,外层 for 循环依次取出存储其中的字典(student1和student2)并把它们依次赋值给变量 student

然后,此时变量 student 就相当于是某一个学生字典,所以我们可以通过 student['name'] student['age'] 访问到学生的姓名和年龄。

最后,因为 student['course'] 存储的是课程列表,所以需要循环打印列表。

结尾语

Python语法简单且灵活,本文讲述的字典和列表嵌套可以当作抛砖引玉,希望能起到举一反三的效果。

如果你对文中讲述的内容还有疑惑,欢迎和我交流,我们一起在讨论中进步。

扫码关注「猿天罡」

更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论