字典插画

列表是按编号找东西,但生活中我们更习惯按名字找:查字典按拼音找字,点外卖按菜名找菜。字典(dict)就是"按名字找值"的抽屉柜。

一、字典:键值对的抽屉柜

键值对示意

student = {"姓名": "小明", "年龄": 16, "班级": "高一(1)班"}

print(student["姓名"])      # 小明:用"键"找"值"
student["年龄"] = 17        # 修改:把年龄抽屉换成17
student["成绩"] = 95        # 新增:加一个"成绩"抽屉
del student["班级"]         # 删除一个抽屉

字典用大括号 {},里面是一对对 键: 值(key: value):

  • 键是抽屉上的标签,必须唯一(一般用字符串);
  • 值是抽屉里的东西,可以是任何类型,甚至再套一个字典、列表。
💡 找不存在的键会报错!保险起见用 get():student.get("身高") 找不到就返回 None,不报错;student.get("身高", "未知") 还能指定默认值。

二、字典的常用操作

student = {"姓名": "小明", "年龄": 16}

print(student.keys())     # 所有键:dict_keys(['姓名', '年龄'])
print(student.values())   # 所有值:dict_values(['小明', 16])
print(student.items())    # 所有键值对
print(len(student))       # 2:有几对
print("年龄" in student)   # True:in 可以查键在不在

# 遍历字典:最常用的姿势
for key, value in student.items():
    print(f"{key}:{value}")

三、字典实战:成绩表

字典 + 列表一组合,就能表示现实中的表格数据:

# 全班成绩:一人一个字典,装进列表
students = [
    {"姓名": "小明", "成绩": 85},
    {"姓名": "小红", "成绩": 92},
    {"姓名": "小刚", "成绩": 78},
]

for s in students:
    print(f"{s['姓名']}:{s['成绩']}分")

# 找最高分是谁
best = max(students, key=lambda x: x["成绩"])
print(f"最高分是{best['姓名']}")   # 小红
💡 key=lambda x: x["成绩"] 是"按成绩来比"的意思,lambda 是匿名函数,第十课学函数时就明白了,这里先会用就行。

四、集合:自动去重的袋子

集合示意

集合(set)也是大括号,但里面只有值没有键,而且自动去重、没有顺序:

nums = {1, 2, 2, 3, 3, 3}
print(nums)           # {1, 2, 3}:重复的被吞掉了

# 最常用的本事:给列表去重
names = ["小明", "小红", "小明", "小刚", "小红"]
print(list(set(names)))   # ['小明', '小红', '小刚'](顺序可能变)
列表 list字典 dict集合 set
括号[]{键: 值}{值}
找东西按编号按键只能查在不在
特点有序可重复键唯一自动去重、无序
⚠️ 注意:{} 空大括号是空字典,不是空集合!空集合要写 set(),这是考试爱挖的坑。

五、动手练一练

练习 1:用字典存一件商品的信息(名称、价格、库存),然后输出"XX的价格是XX元,库存还剩XX件"。

练习 2:用户输入一句话,用集合统计这句话里出现了多少个不同的汉字(提示:字符串可以直接转集合 set("你好你好"))。

点击查看参考答案
# 练习1
goods = {"名称": "笔记本", "价格": 5.5, "库存": 20}
print(f"{goods['名称']}的价格是{goods['价格']}元,库存还剩{goods['库存']}件")

# 练习2
s = input("输入一句话:")
print(f"共有{len(set(s))}个不同的汉字")
🎉 这一课你学会了:字典的键值对操作、集合去重。下一课学习函数——给一段代码起个名字,随叫随到!
More

相关教程