Python 零基础入门第七章:字典 Dict

专栏:Python 零基础全套入门教程 🎯 本章定位:Python 中核心映射数据类型,以键值对存储数据,适合描述对象信息,爬虫、数据分析、接口 JSON 解析都会大量使用字典,是日常开发使用频率极高的数据结构。

✅ 学习目标

  1. 理解字典「键‑值对」存储思想,区分字典和列表的使用场景
  2. 掌握字典创建、访问、新增、修改、删除元素
  3. 熟练使用 keys ()、values ()、items () 遍历字典
  4. 掌握字典嵌套:列表套字典、字典套字典
  5. 熟悉字典常用内置方法,规避键不存在引发的报错

一、字典基础概念

列表是按下标索引 取值,有序的数据集合;字典是通过**键 (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 删除字典元素

  1. 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"])

五、字典其他常用方法

  1. 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

六、字典高频易错点总结

  1. key 只能为不可变类型:字符串、数字、元组;列表不可以做字典 key
  2. key 不能重复,重复会发生覆盖
  3. 使用dict[key]取值,key 不存在直接抛出 KeyError,正式代码优先用 get ()
  4. in直接判断字典,判断的是键,不是值;判断值要用 in dict.values()
  5. del、pop 区别:pop 可以拿到被删除的数据;del 只做删除操作
  6. 字典嵌套访问,层级不要写太多,可读性会变差

错误示例:

复制代码
# 列表不能作为key
# test = {[1,2]:"abc"}  # 报错

📝本章实战习题

基础题

  1. 创建一个字典描述书本信息:书名、作者、价格;分别使用 \[\] 和 get 两种方式取出书名。
  2. 定义字典car = {"brand":"比亚迪","color":"白色"},新增键值对"price":150000;修改颜色为 "灰色";删除 brand 键。
  3. 遍历字典user = {"id":1001,"username":"admin","password":"123456"},同时打印所有键和值。

进阶题

  1. 有学生列表:

    students = [
    {"name":"张三","score":88},
    {"name":"李四","score":59},
    {"name":"王五","score":92}
    ]

遍历列表,打印分数大于等于 60 分的学生姓名。

  1. 字典info = {"city":"深圳","area":"龙华"},判断city这个键是否存在字典中,如果存在打印城市的值,不存在打印 "无城市信息"。

思考题

  1. 写程序合并两个字典:

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

相关推荐
威联通网络存储12 分钟前
TS-h2477AXU-RP 在化工制造数据场景的部署
python·制造
躺着听Jay13 分钟前
QT交叉编译
开发语言·qt
2601_9669496515 分钟前
如何判断盘中最新价相对昨日收盘涨跌幅,并实时触发止盈止损条件单:QuantDash Python 实战
开发语言·python·量化策略·量化·quantdash
下辈子不要当码农21 分钟前
Day7-Linux软件编程(进程与线程(3))
java·开发语言
桃西西呀26 分钟前
刷短视频越刷越窄?SVD 奇异值分解,把 10 万条电影评分拆成你的品味特征
python·数学·数据可视化
大模型码小白33 分钟前
Spring AI 框架中集成 MCP 的完整指南:从服务端到客户端的全流程实践
大数据·运维·数据库·人工智能·python·sql·spring
青 春 记 忆36 分钟前
零基础入门python29:用 pytest 验收完整 Flask 业务流程
python·flask·后端开发
CarIise37 分钟前
JavaScript进阶与轮播图实现 课堂笔记
开发语言·javascript·笔记
mayaairi43 分钟前
JS DOM节点操作完全指南:增删改查与性能优化
开发语言·javascript·性能优化