文章目录
- 一、字典数据类型
- 二、细说字典与列表
- 三、重要的3个方法:keys()、values()、items()
- 四、检查字典中是否存在键或值
- 五、get()方法
- 六、清空
- 七、修改
- 八、字典的嵌套
- 字典套字典
- 字典套列表
- 字典套字典套列表
- 练习题
一、字典数据类型
编程的 「字典」 其实和现实中,我们使用的「字典」一样。
大家都有用过“新华字典”吧,我们都会根据“索引”去快速找到某个字、词。
编程中的“字典”数据类型,可以说比“新华字典”更容易理解。是由“键-值对”组成的数据。
字典的索引(键)与列表不一样,字典的索引不仅可以是“数字”,也可以是“字符”。
# 我们来创建一个“字典”。 my_info = {"name": "测试划水老师傅", "sex": "男", "age": "31"}
我们创建了一个字典,并将字典赋给“my_info”这个变量。
我们将个人信息存储在字典中,分别有3个“键值对”,键值对之间以“逗号”隔开。(建议键以英文命名)
二、细说字典与列表
- 字典中的项是不排序的,列表是有排序的。比如列表中第一项是list[0],而字典没有这个概念。
- 基于第一条概念,推到出字典无法像列表一样,进行「切片」操作。
- 访问字典不存在的“项(key)”,会报错“KeyError”,就像列表访问不存在的下标,会报“越界IndexError”的错误一样。
- 也许你以为字典的创建很麻烦,还不能排序,但是字典远比你想象的强大,因为它支持用任意值作为“键”,并可以通过“键”快速访问数据,后期你会发现,复杂数据的存储,必然要用到字典。
# 手机通讯录
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}
while True:name = input("「通讯录」输入你想查询的人名:")if name == '':breakif name in address_book:print(f'{name}:{address_book[name]}')else:print("暂无该联系人,请添加!")
三、重要的3个方法:keys()、values()、items()
Python为我们提供了很多字典的访问和操作方法,我们先来看看最重要的3个方法,这3个你一定要掌握!
keys() —— 字典的“键”。
values() —— 字典的“值”。
items() —— 字典的“键值对”。
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}
print(address_book.keys())
print(address_book.values())
print(address_book.items())
"""代码运行结果:
dict_keys(['kevin', 'cc', 'yaya'])
dict_values(['18000000000', '18000000001', '18000000002'])
dict_items([('kevin', '18000000000'), ('cc', '18000000001'), ('yaya', '18000000002')])
"""
我们发现,返回的内容看似是列表,其实不是,不信你可以用我们之前学过的“type”试试。
那么既然不是列表,就没有append()等列表方法,但我们发现这些数据可以用for循环进行遍历。
# keys(),字典键的循环遍历
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}for k in address_book.keys():print(k)
"""代码运行结果:
kevin
cc
yaya
"""
# values(),字典值的循环遍历
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}for v in address_book.values():print(v)"""代码运行结果:
18000000000
18000000001
18000000002
"""
# values(),字典值的循环遍历
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}for k,v in address_book.items():print(f'键:{k} 对应的值 值:{v}')"""代码运行结果:
键:kevin 对应的值 值:18000000000
键:cc 对应的值 值:18000000001
键:yaya 对应的值 值:18000000002
"""
四、检查字典中是否存在键或值
还记得之前我们学习列表时,用到的 "in\not in"吗?在字典中,这个操作同样适用。
# 检查字典中是否存在键或值
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}print("kevin" in address_book.keys())
print("18000000000" in address_book.values())"""代码运行结果:
True
True
"""
五、get()方法
我们前面学过通过使用key来获取值,但是存在一个问题,如果key不存在,代码会报错,此时我们有一个更好的方法来获取,就是通过get()方法,如果key不存在,会返回一个默认值,代码不会报错。
# get()方法
address_book = {'kevin': '18000000000', 'cc': '18000000001', 'yaya': '18000000002'}print(address_book.get("kevin"))
print(address_book.get("kevi"))"""代码运行结果:
18000000000
None
"""
六、清空
clear():清空字典数据,保留空字典。
d2 = {"姓名":"测试划水老师傅","性别":"男","年龄":"30"}
d2.clear()
print(d2)
"""代码运行结果:
{}
"""
七、修改
字典序列[key] = 值 ,如果key存在修改,不存在则是新增。
d1 = {"姓名":"测试划水老师傅","性别":"男","年龄":"30"}
d1["姓名"] = "python"
print(d1)
"""代码运行结果:
{'姓名': 'python', '性别': '男', '年龄': '30'}
"""
八、字典的嵌套
我们会发现,生活中有些事物的关联关系很复杂。
字典套字典
# 我们记录不同大学中,计算机专业的学生总人数
universities = {"tsinghua": {"computer_major": "49人"}, "Peking": {"computer_major": "50人"}}
# 使用账号密码登录网站,在代码中的请求如下。
login = {"username": "test","password":"111111"}
字典套列表
# 在一些网站上,我们要一次上传多张照片,此时照片是一个列表。
upload_img = {"my_imgs": ["https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000001.jpg","https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000002.jpg"]}
字典套字典套列表
# 假设,我们上传照片需要分类,此时结构会更复杂。
upload_img = {{"my_life_imgs": ["https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000001.jpg","https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000002.jpg"]}, {"my_work_imgs": ["https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000001.jpg","https://test.oss-cn-beijing.aliyuncs.com/Photo/20230000002.jpg"]}}
这些结构看起来也许比较复杂,其实理解后,会发现数据存储,数据读取会很方便。
练习题
"""
评分系统:
校园演讲大赛,评委给参赛的5名选手,分别给出了最终的评分。
请根据评分表,将选手的一个最高分、最低分去掉,并求出平均分数。
最后,请将各位选手的平均得分,由高到低排序,输出选手编号和得分。
"""