当前位置:首页>python>第 16 课 Python 的变量类型 —— 字典 dict

第 16 课 Python 的变量类型 —— 字典 dict

  • 2026-10-11 00:25:23
第 16 课 Python 的变量类型 —— 字典 dict

字典是日常编程最常用的数据结构,细节陷阱很多,学习结束之后欢迎在评论区留下你的测试代码、疑问,大家一起交流学习!

一、课程前言

前面我们已经学完序列容器:列表(list)、元组(tuple),二者依靠数字下标存取数据。

本节课学习字典 dict,属于映射型容器,键‑值(key‑value)结构,底层依靠哈希表实现,查询速度极快,适合用来保存一一对应的数据,例如个人信息、商品价格、账号资料、JSON数据等。

通俗类比:现实当中的新华字典,单词就是键key,汉字解释就是值value;输入单词,立刻查到释义,不需要从头翻找。

二、基础概念详解

1. 字典核心特性

1. 键值对存储:格式 key:value,依靠键查找数值,不再依靠数字下标

2. Python3.7及以上版本,默认保留插入顺序;旧版本无序

3. 键 key 唯一不可重复,重复写入相同键,后面的数据直接覆盖旧数值

4. 键必须为不可变、可哈希的数据:字符串、整数、浮点数、纯元素元组;列表、字典、集合这类可变类型不能充当键

5. 值 value 没有任何限制,可以存放列表、字典、布尔、嵌套数据

6. 可变容器,可以随时新增、修改、删除键值对

7. 查询效率极高,哈希表查找速度 O(1),数据再多查找耗时基本不变,远快于列表遍历查找

2. 多种字典创建方式(全套写法)

# 方式1:大括号创建,最常用student = {"name":"小李","age":16,"gender":"男"}# 空字典empty_dict = {}# 方式2:dict() 关键字参数创建person = dict(name="小王",height=172)# 方式3:嵌套列表、元组转换成字典goods = dict([("苹果",5),("香蕉",3)])# 方式4:fromkeys() 批量初始化字典# 所有键共用同一个初始数值name_list = ["a","b","c"]test_dict = dict.fromkeys(name_list,0)print(test_dict)

fromkeys易错细节:所有键指向同一个对象,如果初始值是列表,修改其中一个,全部键的值都会跟着改动

3. 合法键与非法键示例

# 合法键d1 = {100:"数字键","hello":"字符串键",(1,2):"元组键"}# 报错!列表属于可变对象,不可哈希,禁止作为key# d2 = {[1,2]:"测试"}

三、字典增、删、改、查完整代码案例

1. 增加、修改数据

字典新增键值对、修改数据语法一致:

键原本存在 → 修改旧的值

键不存在 → 添加全新键值对

info = {"name":"小张"}info["age"] = 18   # 新增info["name"] = "张三" # 修改原有键print(info)
2. 查询取值两种方式

① 中括号取值 字典[key]

键不存在直接抛出 KeyError 报错

price = {"可乐":3,"面包":6}print(price["可乐"])

② get()安全取值(开发首选,不会报错)

键不存在默认返回None,也可以自定义返回提示

print(price.get("可乐"))print(price.get("辣条","该商品不存在"))

3. 删除操作

d = {"a":1,"b":2,"c":3}# del:删除指定键值对del d["a"]# pop() 删除指定键,并且返回被删除的值res = d.pop("b")print(res)# popitem() 删除最后插入的一组键值对,返回元组print(d.popitem())# clear() 清空字典,变为空字典d.clear()
4. 提取键列表、值列表、键‑值对
data = {"name":"莉莉","age":17}print(data.keys())      # 获取所有键print(data.values())    # 获取所有数值print(data.items())     # 获取全部键值对元组
四、字典循环遍历

方式1:默认循环只读取键

user = {"name":"阿明","age":19}for k in user:    print(k,user[k])

方式2:items() 同时取出键和值(最常用)

for key,value in user.items():    print(f"键:{key},值:{value}")

五、重点特殊知识点 & 高频踩坑点

坑1:键具备唯一性,重复键直接覆盖

test = {"num":10,"num":99}print(test)# 输出 {'num': 99},后面的数据覆盖前面
坑2:可变列表、字典无法充当字典键

因为列表随时可以修改内存数据,哈希值不稳定,不允许作为key;

只有固定不变的数据,才可以计算哈希地址。

坑3:字典属于可变对象,直接赋值会共用内存地址

dict1 = {"a":10}dict2 = dict1dict2["a"] = 99print(dict1)# dict1的数据同样被修改,二者指向同一块内存
字典独立拷贝写法:
dict2 = dict1.copy()

坑4:嵌套字典(多层字典)取值

people = {"user":{"name":"小华","age":15}}print(people["user"]["name"])
坑5:in 判断只针对键,不会检索数值
d = {"x":66}print("x" in d)      # Trueprint(66 in d)       # False,in只查询key# 判断数值需要使用valuesprint(66 in d.values())
坑6、update()批量更新多个键值
a = {"name":"小明","age":12}a.update({"age":13,"gender":"男"})print(a)
存在的键就更新,全新键直接添加。

六、列表、元组、字典三者对比

容器类型

标识

下标/索引

可变性

键要求

列表 list

[]

数字下标

可变

无

元组 tuple

()

数字下标

不可变

无

字典 dict

{}

哈希键 key

可变

必须不可变、可哈希

七、课后练习题(共3题)

习题1(基础题)

创建学生字典 stu = {"姓名":"李伟","年龄":17,"班级":"一班"},使用get方法获取“年龄”;尝试获取不存在的键“身高”,设置默认提示“暂无身高数据”。

习题2(易错填空题)

写出代码运行结果:

d = {"a":10,"a":88}print(d)

习题3(综合实操)

新建商品字典 shop = {"矿泉水":2,"饼干":5,"雪糕":3},遍历字典,打印每一个商品名称以及对应的价格。

字典的坑点集中在键的规则、赋值拷贝、in只检索键这些细节,如果代码报错或是知识点存在疑惑,可以在评论区留言,一起解决问题!

最新文章

随机文章