专栏: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 零基础全套教程