跟着NOAI考纲学Python,学完就能考,第9课

跟着NOAI考纲学Python,学完就能考,第9课

本文核心观点
NOAI 自学 Python 系列第 9 课:字典的键值对结构、增删改查、遍历方式与典型应用(计数、查表)。

跟着NOAI考纲学Python,学完就能考,第9课

每天一个知识点,带你自学NOAI,加入我们吧~

前面学了列表和函数。列表用索引取数据:第0个、第1个……但如果你想用"名字"来查成绩呢?总不能记住每个人排第几吧。这节课学字典——用"名字:值"的方式存数据,想查谁直接用名字找。

创建字典

用花括号 {} 创建字典,里面放 键: 值 对,用逗号隔开:

student = {"小明"90"小红"85"小刚"72}
print(student)
print(type(student))

{'小明': 90, '小红': 85, '小刚': 72}
<class 'dict'>

拆开看:

"小明": 90"小明"(key),90(value)

每对键值之间用逗号隔开

字典的类型是 dict

字典就像通讯录——你不需要记住小明排第几,直接翻到"小明"就能找到他的电话。

取值和修改

来取值,写法是 字典[键]

student = {"小明"90"小红"85}

# 取值
print(student["小明"])

# 添加新的键值对
student["小刚"] = 78
print(student)

# 修改已有的值
student["小红"] = 95
print(student)

90
{'小明': 90, '小红': 85, '小刚': 78}
{'小明': 90, '小红': 95, '小刚': 78}

键已存在就是修改,不存在就是添加。同样的写法 dict[键] = 值,一举两得。

判断键是否存在

如果你用一个不存在的键去取值,Python会报错。所以取值之前最好先判断一下:

student = {"小明"90"小红"85}

print("小明" in student)
print("小刚" in student)

if "小刚" in student:
    print(student["小刚"])
else:
    print("查无此人")

True
False
查无此人

键 in 字典 返回 TrueFalse养成习惯:不确定键存不存在,先用 in 判断,再取值。

遍历字典

直接用 for 循环遍历字典,拿到的是所有的键:

student = {"小明"90"小红"85"小刚"72}

for name in student:
    print(name)

小明
小红
小刚

如果想同时拿到键和值,用 .items()

student = {"小明"90"小红"85"小刚"72}

for namescore in student.items():
    print(name"的成绩是"score)

小明 的成绩是 90
小红 的成绩是 85
小刚 的成绩是 72

.items() 每次循环给你一对键和值,用两个变量 name, score 分别接住。另外还有 .keys() 只拿键、.values() 只拿值,用法类似。

实战:统计字符出现次数

字典最常见的用法之一:统计。给你一个字符串,统计每个字符出现了几次:

text = "hello"
count = {}

for char in text:
    if char in count:
        count[char] = count[char] + 1
    else:
        count[char] = 1

print(count)

{'h': 1, 'e': 1, 'l': 2, 'o': 1}

逻辑很简单:遍历每个字符,如果字典里已经有了就+1,没有就设为1。这个套路在很多题目里都会用到。

易错点

1. 用不存在的键取值 → KeyError

student = {"小明"90}
print(student["小刚"])  # KeyError!

KeyError: '小刚'

字典里没有 "小刚" 这个键,直接取就报错。解决办法:先用 in 判断,再取值。

2. 字典的键不能重复

d = {"a"1"b"2"a"3}
print(d)

{'a': 3, 'b': 2}

写了两个 "a",后面的覆盖前面的,不会报错但值变了。

动手试试

自己先想,想完了香农平台上写代码跑一遍验证。

练习1:预测输出

下面这段代码运行后,屏幕上会输出什么?

info = {"name""小明""age"14}
info["age"] = 15
info["grade"] = "初三"
print(info)

提示:已有的键会被修改,没有的键会被添加。

练习2:找bug

下面这段代码想打印小刚的成绩,但运行报错了。哪里出了问题?怎么修?

scores = {"小明"90"小红"85}
print(scores["小刚"])

提示:字典里有"小刚"这个键吗?

练习3:写代码

给你一个名字列表 names = ["小明", "小红", "小明", "小刚", "小红", "小明"],用字典统计每个名字出现了几次,然后打印结果。

提示:和前面"统计字符出现次数"的套路一样。

去平台上手写代码

学会字典,你可以用"名字"来存取数据了。回顾一下:

{键: 值} — 创建字典

dict[键] — 取值或修改

键 in dict — 判断键是否存在

for k, v in dict.items() — 遍历所有键值对

这篇文章讲的是香农NOAI学习平台"Python基础"模块的第九课。平台上有更多的练习题,写完代码点运行,对不对立刻就知道。

香农NOAI学习平台
地址:shannon.arpa.school
微信扫码登录就能用,免费。
找到「Python基础」→「字典」,从第一道题开始写。

下一篇讲元组——和列表长得像,但创建之后不能改。什么时候该用元组?看完就知道。

微信二维码

扫码备注【NOAI】加交流群