Python字典嵌套

文 | 猿天罡

前言

前两篇文章,我们学习了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)

运行结果如下:

图1-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字典里的键和值分别赋值给变量namecourse

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

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

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

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)

我们先来看看效果图:

在这里插入图片描述

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

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

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

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

接着,因为学生姓名赋值给了变量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)

直接上运行结果:

在这里插入图片描述

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

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

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

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

 

Python字典数据写入TXT文件分析

 

关于字典数据

一个字典由key和value组成,可以通过key值、get()、keys()、values()、items()等方法查找字典中的数据。

字典中get()、keys()、values()、items()方法的使用

  1. get()方法: 字典名.get(key, 默认值) 如果当前key不存在,则返回默认值,如果省略默认值,则返回None
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.get('name'))
print(dict1.get('office', 'IT'))
print(dict1.get('office'))
'''得到的结果'''
Jiangyou
IT
None
  1. keys()方法: 字典名.keys() 返回字典中所有的键(key)
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.keys())
'''得到的结果'''
dict_keys(['name', 'age', 'sex'])
  1. values()方法: 字典名.values() 返回字典中所有的值(value)
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.values())
'''得到的结果'''
dict_values(['Jiangyou', '20', '男'])
  1. items()方法: 字典名.item() 将键值对以元组的方式返回(key, value)
dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
print(dict1.items())
'''得到的结果'''
dict_items([('name', 'Jiangyou'), ('age', '20'), ('sex', '男')])

取出字典中的数据并写入txt中

第一步 将字典中的数据通过 for 循环 items() 方法遍历出来;依然使用之前的简单字典`

dict1 = {'name': 'Jiangyou', 'age': '20', 'sex': '男'}
for item in dict1.items():
    print(item)
'''得到的结果'''
('name', 'Jiangyou')
('age', '20')
('sex', '男')

在将字典中数据遍历出来之后,我们可以看到字典中的数据以 键值对 的方式存放在 元组 中,但是因为元组无法写入txt中,所以接下来我们需要使用操作元组的方法,将数据单个提取出来即可:

for item in dict1.items():
    for i in range(len(item)):
        str1 = item[i]
        print(str1)
'''得到的结果'''
name
Jiangyou
age
20
sex
男

如果你不想分行显示,可以在 print() 中设置 end 参数
接下来执行写入操作:

for item in dict1.items():
    for i in range(len(item)):
        str1 = item[i]
        print(str1,end=' ')
        with open(r'D:\通讯录.txt', 'a') as f:
            f.write(str1)
            f.write('\r\t')

代码运行结束后会在 D 盘目录下创建一个名为“通讯录.txt”的文件 ,字典中的数据就存入txt中了

代码中 f.write(’\r\t’) 的作用是对存入的数据,以一个 tab 单位(四个空格)分隔开

本文所使用方法非常简单和基础,适合初学者了解Pthon 中字典、元组、文件操作的基础用法,至于更复杂的,在需要的时候可以以此为基础,进行改进


————————————————
版权声明:本文为CSDN博主「谁偷了我的小鱼干儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Albert_1000/article/details/99087889

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值