第6章:字典

一、字典数据类型

编程的 「字典」 其实和现实中,我们使用的「字典」一样。

大家都有用过“新华字典”吧,我们都会根据“索引”去快速找到某个字、词。

编程中的“字典”数据类型,可以说比“新华字典”更容易理解。是由“键-值对”组成的数据。

在这里插入图片描述

字典的索引(键)与列表不一样,字典的索引不仅可以是“数字”,也可以是“字符”。

# 我们来创建一个“字典”。
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 == '':
        break
    if 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:/XXXXXXXXX.jpg","https://XXXXXXXXX.jpg"]}

字典套字典套列表

# 假设,我们上传照片需要分类,此时结构会更复杂。
upload_img = {{"my_life_imgs": ["https://XXXXXXXXXXXXXXXXXXXX.jpg",
                                "https://XXXXXXXXXXXXXXXXXXXX.jpg"]}, {
                  "my_work_imgs": ["https://XXXXXXXXXXXXX.jpg",
                                   "https://XXXXXXXXXXXXX.jpg"]}}

这些结构看起来也许比较复杂,其实理解后,会发现数据存储,数据读取会很方便。

练习题

"""
评分系统:
校园演讲大赛,评委给参赛的5名选手,分别给出了最终的评分。
请根据评分表,将选手的一个最高分、最低分去掉,并求出平均分数。
最后,请将各位选手的平均得分,由高到低排序,输出选手编号和得分。
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试划水老师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值