专栏:Python 零基础全套入门教程 🎯 本章定位:Python 中核心映射数据类型,以键值对存储数据,适合描述对象信息,爬虫、数据分析、接口 JSON 解析都会大量使用字典,是日常开发使用频率极高的数据结构。
✅ 学习目标
- 理解字典「键‑值对」存储思想,区分字典和列表的使用场景
- 掌握字典创建、访问、新增、修改、删除元素
- 熟练使用 keys ()、values ()、items () 遍历字典
- 掌握字典嵌套:列表套字典、字典套字典
- 熟悉字典常用内置方法,规避键不存在引发的报错
一、字典基础概念
列表是按下标索引 取值,有序的数据集合;字典是通过**键 (key)**来找值 (value),属于映射类型。
字典格式:{键1:值1, 键2:值2, 键3:值3}
- key(键):必须是不可变类型,常用字符串、数字;键不能重复,重复后面会覆盖前面
- value(值):可以是任意数据类型,字符串、数字、列表、字典都可以
- 字典使用大括号
{}包裹,元素之间逗号分隔
1.1 创建字典
# 方式1:直接字面量创建
student = {
"name": "小明",
"age": 16,
"gender": "男",
"hobby": ["篮球","看书"]
}
print(student)
# 方式2:空字典
empty_dict = {}
print(type(empty_dict)) # <class 'dict'>
# 方式3:dict()函数创建
person = dict(name="小红", age=15)
print(person)
易错点:字典 key 重复,后定义的值覆盖前面
# name重复,最终只会保留后面的值
test_dict = {"name":"张三","name":"李四"}
print(test_dict) # {'name': '李四'}
1.2 获取字典中的值
方式 1:字典[键],键不存在直接抛异常报错
student = {"name": "小明", "age":16}
print(student["name"]) # 小明
print(student["age"]) # 16
# print(student["score"]) # KeyError,键不存在程序直接崩溃
方式 2:get()方法,推荐开发使用,键不存在返回 None,不会报错
student = {"name": "小明", "age":16}
print(student.get("name"))
# 键不存在,默认返回None
print(student.get("score"))
# 可以设置找不到键时的自定义默认值
print(student.get("score",0))
二、字典增删改操作
2.1 添加 / 修改键值对
语法:字典[键] = 值
-
如果键已经存在:代表修改原有键对应的值
-
如果键不存在:代表新增一组键值对
student = {"name":"小明","age":16}
修改已有的key
student["age"] = 17
print(student)新增key
student["gender"] = "男"
student["score"] = 90
print(student)
2.2 删除字典元素
-
del:删除指定键值对;也可以直接删除整个字典对象student = {"name":"小明","age":16,"gender":"男"}
del student["gender"]
print(student)del student # 直接删除字典变量,后续无法访问
2.pop(key):删除指定 key,同时返回被删除的值,key 不存在报错
student = {"name":"小明","age":16}
res = student.pop("age")
print(res) #16
print(student)
3.clear():清空字典内部所有元素,字典对象保留,变成空字典
student = {"name":"小明","age":16}
student.clear()
print(student) # {}
三、字典遍历
字典提供 3 个重要方法:
-
.keys()获取全部键 -
.values()获取全部值 -
.items()获取全部键值对元组student = {"name":"小明","age":16,"gender":"男"}
遍历所有key
for k in student.keys():
print("键:",k)遍历所有value
for v in student.values():
print("值:",v)遍历键和值,最常用
for k,v in student.items():
print(f"{k} : {v}")
拓展:直接 for 循环字典变量本身,默认遍历的是 keys ()
for k in student:
print(k)
四、字典嵌套
实际项目经常使用嵌套,分为列表嵌套字典、字典嵌套字典。
4.1 列表里面存放字典,多条对象数据
student_list = [
{"name":"小明","age":16},
{"name":"小红","age":15},
{"name":"小刚","age":17}
]
# 遍历取出每一个学生字典
for stu in student_list:
print(stu["name"], stu["age"])
4.2 字典里面存放字典
class_info = {
"class1":{
"teacher":"张老师",
"count":30
},
"class2":{
"teacher":"李老师",
"count":32
}
}
print(class_info["class1"]["teacher"])
五、字典其他常用方法
-
update()批量合并更新字典d1 = {"a":1,"b":2}
d2 = {"b":99,"c":3}
d1.update(d2)
print(d1) # {'a': 1, 'b': 99, 'c': 3}
2.in 判断 key 是否存在字典中(注意:in 判断的是键,不是值)
d = {"name":"小明","age":16}
print("name" in d) # True
print("小明" in d) # False,判断的是key,不是value
# 判断值是否存在需要搭配values()
print("小明" in d.values()) # True
六、字典高频易错点总结
- key 只能为不可变类型:字符串、数字、元组;列表不可以做字典 key
- key 不能重复,重复会发生覆盖
- 使用
dict[key]取值,key 不存在直接抛出 KeyError,正式代码优先用 get () in直接判断字典,判断的是键,不是值;判断值要用in dict.values()- del、pop 区别:pop 可以拿到被删除的数据;del 只做删除操作
- 字典嵌套访问,层级不要写太多,可读性会变差
错误示例:
# 列表不能作为key
# test = {[1,2]:"abc"} # 报错
📝本章实战习题
基础题
- 创建一个字典描述书本信息:书名、作者、价格;分别使用 \[\] 和 get 两种方式取出书名。
- 定义字典
car = {"brand":"比亚迪","color":"白色"},新增键值对"price":150000;修改颜色为 "灰色";删除 brand 键。 - 遍历字典
user = {"id":1001,"username":"admin","password":"123456"},同时打印所有键和值。
进阶题
-
有学生列表:
students = [
{"name":"张三","score":88},
{"name":"李四","score":59},
{"name":"王五","score":92}
]
遍历列表,打印分数大于等于 60 分的学生姓名。
- 字典
info = {"city":"深圳","area":"龙华"},判断city这个键是否存在字典中,如果存在打印城市的值,不存在打印 "无城市信息"。
思考题
-
写程序合并两个字典:
dict_a = {"name":"test","age":20}
dict_b = {"age":21,"gender":"男"}
合并后,重复键 age 取 dict_b 的值。
✅参考答案
#习题1
book = {"title":"Python入门","author":"讲师","price":59}
print(book["title"])
print(book.get("title"))
#习题2
car = {"brand":"比亚迪","color":"白色"}
car["price"] = 150000
car["color"] = "灰色"
del car["brand"]
print(car)
#习题3
user = {"id":1001,"username":"admin","password":"123456"}
for k,v in user.items():
print(k, v)
#习题4
students = [
{"name":"张三","score":88},
{"name":"李四","score":59},
{"name":"王五","score":92}
]
for s in students:
if s["score"] >= 60:
print(s["name"])
#习题5
info = {"city":"深圳","area":"龙华"}
if "city" in info:
print(info.get("city"))
else:
print("无城市信息")
#习题6
dict_a = {"name":"test","age":20}
dict_b = {"age":21,"gender":"男"}
dict_a.update(dict_b)
print(dict_a)
💖 点赞 + 收藏 + 关注,持续更新 Python 零基础全套教程