你好呀!👋 欢迎回到我们的 Python 课堂。上节课我们学习了"上了锁的列表"------元组,今天我们要来学习 Python 中最强大、最常用的数据结构之一:字典(Dictionary)。
如果说列表和元组是按"顺序"排队的队伍,那么字典就像是一本真正的字典 或者你的手机通讯录:你不需要知道它排在第几个,你只需要知道它的"名字"(键),就能立刻找到对应的"内容"(值)。
准备好了吗?我们开始今天的课程!👩🏫
一、 什么是字典(Dictionary)?
字典是一种可变的容器模型 ,它存储的是 键值对(Key-Value pairs)。
- 外观特征 :使用花括号
{}包裹,键和值之间用冒号:分隔,每对之间用逗号,分隔。 - 核心规则(🌟 必考点) :
- 键(Key)必须是唯一的:如果同一个键被赋值两次,后面的值会覆盖前面的值。
- 键(Key)必须是不可变的 :你可以用字符串、数字或元组 作为键,但绝对不能用列表(因为列表是可变的)。
- 值(Value)可以是任何数据类型:数字、字符串、列表,甚至另一个字典都可以。
python
# 一个标准的字典实例
student = {
'name': '小明', # 键是字符串,值是字符串
'age': 18, # 键是字符串,值是整数
'hobbies': ['篮球', '编程'] # 键是字符串,值是列表
}
(💡 老师提醒:dict 是 Python 的内置关键字,请千万不要把你的变量命名为 dict,比如 dict = {} 是错误的写法,可以用 my_dict 或 info 代替。)
二、 如何创建字典?
python
# 1. 使用花括号创建
dict1 = {'apple': 5, 'banana': 3}
# 2. 创建空字典(两种方法)
empty_dict1 = {}
empty_dict2 = dict()
# 3. 使用 dict() 构造函数(适合从成对的数据中创建)
dict2 = dict(name='Alice', age=25) # 注意:这里的键不需要加引号
print(dict2) # 输出: {'name': 'Alice', 'age': 25}
三、 访问字典里的值
方法 1:使用方括号 [](直接,但有风险)
python
info = {'name': 'Runoob', 'age': 7}
print(info['name']) # 输出: Runoob
⚠️ 风险 :如果你访问了一个不存在的键,Python 会直接报错(KeyError),导致程序崩溃。
python
# print(info['gender']) # ❌ 报错:KeyError: 'gender'
方法 2:使用 .get() 方法(🌟 老师强烈推荐的最佳实践)
.get() 方法在找不到键时,不会报错,而是返回 None,或者你指定的默认值。
python
print(info.get('age')) # 输出: 7
print(info.get('gender')) # 输出: None (程序安全运行)
print(info.get('gender', '未知')) # 输出: 未知 (找不到时返回你设定的默认值)
四、 修改与添加元素
在字典中,修改 和添加使用的是完全相同的语法。Python 会检查键是否存在:存在就修改,不存在就添加。
python
info = {'name': 'Runoob', 'age': 7}
# 1. 修改已存在的键
info['age'] = 8
print(info) # 输出: {'name': 'Runoob', 'age': 8}
# 2. 添加新的键值对
info['school'] = '菜鸟教程'
print(info) # 输出: {'name': 'Runoob', 'age': 8, 'school': '菜鸟教程'}
五、 删除字典元素
根据你想删除的范围,有 4 种不同的方法:
python
d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 1. del 语句:删除指定的键值对
del d['a']
print(d) # 输出: {'b': 2, 'c': 3, 'd': 4}
# 2. .pop(key):删除指定键,并【返回】被删除的值(非常实用)
removed_value = d.pop('b')
print(removed_value) # 输出: 2
print(d) # 输出: {'c': 3, 'd': 4}
# 3. .popitem():删除并返回【最后一对】键值对 (Python 3.7+ 保证删除最后插入的)
last_item = d.popitem()
print(last_item) # 输出: ('d', 4)
# 4. .clear():清空字典所有内容,但保留字典本身
d.clear()
print(d) # 输出: {}
六、 字典的遍历(🌟 核心实战技能)
在实际开发中,我们经常需要把字典里的内容全部打印或处理一遍。字典提供了三个视图方法:.keys(), .values(), .items()。
python
user = {'name': 'Alice', 'age': 25, 'city': 'Beijing'}
# 1. 遍历所有的键 (默认行为,等同于 user.keys())
for key in user:
print(key, end=" ")
# 输出: name age city
# 2. 遍历所有的值
for value in user.values():
print(value, end=" ")
# 输出: Alice 25 Beijing
# 3. 🌟 同时遍历键和值 (最常用!使用 .items())
for key, value in user.items():
print(f"键是: {key}, 值是: {value}")
# 输出:
# 键是: name, 值是: Alice
# 键是: age, 值是: 25
# 键是: city, 值是: Beijing
七、 🎁 老师的加分项:字典的高级技巧
1. 为什么列表不能做键,但元组可以?
回顾我们上节课学的:字典的键必须是不可变的(哈希的)。
python
# ✅ 正确:元组是不可变的,可以做键
location = {(39.9, 116.4): "北京"}
# ❌ 错误:列表是可变的,做键会报错
# bad_location = {[39.9, 116.4]: "北京"} # TypeError: unhashable type: 'list'
2. .setdefault() 方法:优雅地初始化
如果你想统计单词出现的次数,传统的写法需要判断键是否存在。用 .setdefault() 可以一行搞定:
python
word_count = {}
word = "apple"
# 如果 "apple" 不在字典里,就设为 0,然后 +1
word_count[word] = word_count.setdefault(word, 0) + 1
print(word_count) # 输出: {'apple': 1}
八、 📝 课后小练习(巩固时间!)
请打开你的 Python 编辑器,尝试完成以下 3 个小任务。遇到报错不要怕,读懂报错信息是程序员的第一步!
- 创建与访问 :创建一个字典
book,包含书名('title')、作者('author')和价格('price')。尝试用.get()方法获取 'publisher'(出版社),如果不存在,让它返回 "暂无信息"。 - 安全修改 :尝试把
book的价格打 8 折(即原价格乘以 0.8),然后添加一个新的键值对 'is_on_sale': True。 - 遍历挑战 :使用
.items()遍历book字典,打印出类似这样的格式:属性: title, 内容: Python基础教程。
结语
字典是 Python 赋予我们的"魔法书",它让数据的组织变得极其直观和高效。掌握了字典的增删改查和遍历,你就已经具备了处理大部分现实世界数据(比如 JSON 数据、配置文件)的能力。
去试试课后练习吧!如果有任何一行代码不理解,或者运行结果和你想象的不一样,随时带着代码来问我。老师随时在这里为你解答!🚀