Python闯关第4关:字典——给数据建个"智能通讯录"
```python
student = {
"name": "张三",
"age": 25,
"gender": "男",
"score": 95
}
```
- 大括号 `{}` = 柜子
- 冒号左边 `key` = 标签(联系人姓名)
- 冒号右边 `value` = 内容(手机号/备注)
| 特性 | 生活类比 | 说明 |
|---|---|---|
| 精准查找 | 通讯录搜名字 | 直接 `student["score"]` 拿成绩 |
| 混搭存储 | 便签夹里塞纸条+照片 | value 可以是任意类型,甚至列表/字典 |
| 自动去重 | 同一联系人只存一个号 | 重复 key 会被后者覆盖 |
⚠️ 键必须是不可变类型(str/int/float/tuple),列表当 key 会翻车!
| 写法 | 特点 | 示例 |
|---|---|---|
| 方括号 | 简单暴力,key 不存在就 `KeyError` | `student["height"]` |
| `.get()` | 温柔兜底,可给默认值 | `student.get("height", "未填写")` |
```python
student["height"] = 175 # 单条新增
student.update({"weight": 65}) # 批量新增
```
```python
student["age"] = 24 # 旧值 25 直接被 KO
```
| 命令 | 效果 | 备注 |
|---|---|---|
| `del student["gender"]` | 直接消失 | key 不存在会报错 |
| `score = student.pop("score")` | 取出并删除 | 返回被删值,可备用 |
| `student.clear()` | 一键清空 | 柜子还在,内容全没 |
```python
for key, value in student.items():
print(f"{key}: {value}")
```
```python
keys = student.keys() # 所有标签
values = student.values() # 所有内容
```
```python
class_students = {
"student1": {"name": "张三", "score": 95},
"student2": {"name": "李四", "score": 88}
}
print(class_students["student2"]["score"]) # 输出 88
```
⚠️ 嵌套别超过 3 层,否则自己都找不到北!
🎯 课后小练(下一关前必交)
1. 创建个人字典 `me`,至少含姓名、年龄、爱好(列表)
2. 用 `.get()` 安全读取"身高",缺失显示"保密"
3. 把爱好列表追加一项"刷Python题"
4. 遍历打印所有 key:value,格式自定