news 2026/2/27 23:28:54

8.Python3字典(dict):键值的增删改查_入门到进阶

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
8.Python3字典(dict):键值的增删改查_入门到进阶

字典是Python中非常强大的内置数据结构,像是一个"智能索引卡片盒"。我们从以下几个方面来讲解:

目录

1. 字典是什么?

2. 创建字典

3. 增:添加键值对

4. 删:删除键值对

5. 改:修改键值对

6. 查:查找键值对

7. 字典遍历

8. 字典操作总结表

9. 字典 vs 列表 vs 元组

10. 常见错误提醒

11. 字典的进阶用法

12. 总结


字典(dict)- 键值对集合

1. 字典是什么?

字典是一种可变的、无序的键值对集合。每个键(key)对应一个值(value),就像我们现实中的字典:通过"单词"(键)查找对应的"解释"(值)。

特点

  • 键必须是不可变类型(字符串、数字、元组)
  • 值可以是任意类型
  • 字典无序(Python 3.7+ 虽然保持了插入顺序,但本质上还是无序的)

关于有序无序的补充:

以前是纯哈希表(专门用来存储“键值对”(Key-Value)的数据结构。无论数据结构有多大,通过键可以迅速定位到对应的值)。哈希表可以看成一个大仓库,东西都乱放的,没有顺序。

现在说的有序,其实是多加了一个索引数组,字典的存储就更紧凑、省内存。我们通过索引数组(前台),找到对应哈希表(后台)的键值对的位置。输出的话,就是按照后台的插入顺序01234输出。所以看起来有序。

  • 建议:在日常写代码时,完全可以依赖字典的插入顺序,不用担心它变乱。

2. 创建字典

# 空字典 empty_dict = {} # 有元素的字典(使用大括号) student = { "name": "小明", "age": 18, "grade": "高三" } # 使用dict()构造函数 person = dict(name="小红", age=17, city="北京") # 混合类型字典 mixed = { "整数": 100, "字符串": "Python", "列表": [1, 2, 3], "元组": (4, 5, 6), "嵌套字典": {"key": "value"} } print(student) # 输出:{'name': '小明', 'age': 18, 'grade': '高三'}

代码解释:用大括号{}创建字典,键值对用key: value格式,之间用逗号隔开。


3. 增:添加键值对

# 创建一个空字典 info = {} # 方法1:直接赋值添加(最常用) info["name"] = "张三" info["age"] = 25 print(info) # 输出:{'name': '张三', 'age': 25} # 方法2:update()批量添加 info.update({"job": "工程师", "city": "上海"}) print(info) # 输出:{'name': '张三', 'age': 25, 'job': '工程师', 'city': '上海'} # 方法3:setdefault()添加(如果键不存在) info.setdefault("salary", 8000) # 添加,因为salary不存在 print(info) # 输出:{'name': '张三', 'age': 25, 'job': '工程师', 'city': '上海', 'salary': 8000} info.setdefault("name", "李四") # 不添加,因为name已存在 print(info["name"]) # 输出:张三(保持不变)

关键点dict[key] = value最简单,update()批量添加,setdefault()智能添加。


4. 删:删除键值对

data = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5} # 方法1:del 根据键删除 del data["a"] # 删除键为"a"的项 print(data) # 输出:{'b': 2, 'c': 3, 'd': 4, 'e': 5} # 方法2:pop() 删除并返回值 value = data.pop("b") # 删除键为"b"的项,并返回值 print(f"删除的值:{value}") # 输出:2 print(f"删除后字典:{data}") # 输出:{'c': 3, 'd': 4, 'e': 5} # 方法3:popitem() 删除最后一项(Python 3.7+) key, value = data.popitem() # 删除并返回最后一项 print(f"删除的键值对:{key}={value}") # 输出:e=5 print(f"删除后字典:{data}") # 输出:{'c': 3, 'd': 4} # 方法4:clear() 清空字典 data.clear() print(data) # 输出:{}

关键点del直接删除,pop()删除并返回,popitem()删除最后一项,clear()清空全部。


5. 改:修改键值对

user = {"name": "张三", "age": 20, "city": "北京"} # 方法1:直接赋值修改 user["age"] = 21 # 修改年龄 print(user) # 输出:{'name': '张三', 'age': 21, 'city': '北京'} # 方法2:update()批量修改 user.update({"city": "上海", "job": "学生"}) # 修改城市,添加工作 print(user) # 输出:{'name': '张三', 'age': 21, 'city': '上海', 'job': '学生'} # 注意:如果update的键不存在,会新增键值对

6. 查:查找键值对

book = { "title": "Python编程", "author": "John", "price": 59.9, "year": 2023 } # 方法1:直接通过键访问 title = book["title"] print(f"书名:{title}") # 输出:Python编程 # 方法2:get()安全访问(推荐) price = book.get("price") print(f"价格:{price}") # 输出:59.9 # get()可以设置默认值(键不存在时返回默认值) pages = book.get("pages", 300) # pages键不存在,返回默认值300 print(f"页数:{pages}") # 输出:300 # 方法3:in检查键是否存在 if "author" in book: print(f"作者存在:{book['author']}") # 输出:作者存在:John # 方法4:keys()获取所有键 all_keys = book.keys() print(f"所有键:{list(all_keys)}") # 输出:['title', 'author', 'price', 'year'] # 方法5:values()获取所有值 all_values = book.values() print(f"所有值:{list(all_values)}") # 输出:['Python编程', 'John', 59.9, 2023] # 方法6:items()获取所有键值对 all_items = book.items() print(f"所有键值对:{list(all_items)}") # 输出:[('title', 'Python编程'), ('author', 'John'), ('price', 59.9), ('year', 2023)] # 方法7:len()获取键值对数量 count = len(book) print(f"字典长度:{count}") # 输出:4

关键点get()比直接访问更安全,keys()values()items()是三个重要方法。


7. 字典遍历

student = {"name": "小明", "age": 18, "grade": "高三", "score": 95} print("=== 遍历所有键 ===") for key in student: print(f"键:{key}") print("\n=== 遍历所有值 ===") for value in student.values(): print(f"值:{value}") print("\n=== 遍历所有键值对 ===") for key, value in student.items(): print(f"{key}: {value}") # 输出: # 键:name # 键:age # 键:grade # 键:score # # 值:小明 # 值:18 # 值:高三 # 值:95 # # name: 小明 # age: 18 # grade: 高三 # score: 95

8. 字典操作总结表

操作类型

方法/语法

作用

示例

返回值

创建

{}

创建字典

d = {"a": 1}

字典

dict()

构造函数

d = dict(a=1)

字典

d[key] = value

添加/修改

d["b"] = 2

update(dict2)

批量添加

d.update({"c":3})

setdefault(key, default)

智能添加

d.setdefault("d", 4)

del d[key]

删除指定键

del d["a"]

pop(key)

删除并返回

d.pop("b")

popitem()

删除最后一项

d.popitem()

(键, 值)

clear()

清空字典

d.clear()

d[key] = value

修改值

d["a"] = 10

update(dict2)

批量修改

d.update({"a":10})

d[key]

访问值

d["a"]

get(key, default)

安全访问

d.get("z", 0)

keys()

所有键

d.keys()

键视图

values()

所有值

d.values()

值视图

items()

所有键值对

d.items()

键值对视图

in

检查键是否存在

"a" in d

布尔值

len(d)

获取长度

len(d)

整数


9. 字典 vs 列表 vs 元组

对比项

字典

列表

元组

符号

{}

[]

()

存储方式

键值对

有序序列

有序序列

可变性

✅ 可修改

✅ 可修改

❌ 不可修改

索引方式

整数索引

整数索引

查找速度

极快(通过键)

较慢(遍历)

较慢(遍历)

内存占用

较多

中等

较少

典型用途

配置文件、JSON数据、数据库记录

动态数据集合

固定数据、函数返回多个值

示例

{"name": "小明", "age": 18}

["小明", "小红"]

(100, 200)

建议:需要快速通过键查找数据就用字典,需要有序集合就用列表,数据固定就用元组。


10. 常见错误提醒

# 错误1:用可变类型作为字典的键 # d = {[1, 2]: "列表"} # TypeError: unhashable type: 'list' # d = {{"a":1}: "字典"} # TypeError: unhashable type: 'dict' # 正确:用不可变类型作为键 d1 = {("a", "b"): "元组作为键"} # 正确,元组不可变 d2 = {"字符串": "值"} # 正确,字符串不可变 d3 = {100: "数字"} # 正确,数字不可变 # 错误2:访问不存在的键 # data = {"a": 1} # print(data["b"]) # KeyError: 'b' # 正确:使用get()方法 value = data.get("b", 0) # 键不存在时返回默认值0 print(value) # 输出:0 # 错误3:遍历时修改字典大小 # d = {"a": 1, "b": 2, "c": 3} # for key in d: # if key == "b": # del d[key] # RuntimeError: dictionary changed size during iteration # 正确:先收集要删除的键,再删除 d = {"a": 1, "b": 2, "c": 3} to_delete = [] for key in d: if key == "b": to_delete.append(key) for key in to_delete: del d[key] print(d) # 输出:{'a': 1, 'c': 3}

11. 字典的进阶用法

# 1. 字典推导式(类似列表推导式) squares = {x: x*x for x in range(1, 6)} print(squares) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25} # 2. 字典合并(Python 3.5+) dict1 = {"a": 1, "b": 2} dict2 = {"c": 3, "d": 4} merged = {**dict1, **dict2} # 合并两个字典 print(merged) # 输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4} # 3. 嵌套字典 students = { "小明": {"age": 18, "grade": "A"}, "小红": {"age": 17, "grade": "B"}, "小刚": {"age": 19, "grade": "A+"} } # 访问嵌套字典 print(students["小明"]["age"]) # 输出:18 # 4. fromkeys()快速创建字典 keys = ["name", "age", "city"] default_dict = dict.fromkeys(keys, "未知") print(default_dict) # 输出:{'name': '未知', 'age': '未知', 'city': '未知'} # 5. 带条件的字典推导式 numbers = [1, 2, 3, 4, 5, 6] even_squares = {x: x*x for x in numbers if x % 2 == 0} print(even_squares) # 输出:{2: 4, 4: 16, 6: 36}

代码解释:

squares = {x: x*x for x in range(1, 6)}

range(1, 6):生成从 1 到 5 的整数序列(不包括 6)

for x in range(1, 6):遍历这个序列中的每个数字

x: x*x:对于每个数字 x,创建一个键值对,其中键是 x,值是 x 的平方

{...}:用花括号包围表示创建一个字典

squares =:将生成的字典赋值给变量 squares

它的传统写法是:

squares = {} for x in range(1, 6): squares[x] = x * x

字典推导式,是一种更简洁的创建字典的方式。


12. 总结

  • 字典:键值对集合,通过键快速查找值
  • 核心特点:可变、无序、键必须不可变
  • 常用操作增删改查四类操作
  • 安全访问:优先使用get()方法避免KeyError
  • 三大视图keys()values()items()是遍历字典的关键
  • 使用场景:配置文件、JSON数据处理、数据库记录、缓存等

记忆口诀

  • 字典用{},键值对存储
  • 键要找不可变,值可随便变
  • 增删改查样样行,get()访问最安全
  • 遍历用items(),清晰又方便

这篇文章涵盖了字典的核心操作,从基础的增删改查到进阶用法,帮助你全面掌握Python字典的使用,让我们一起加油吧~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/16 4:15:30

PanSearch网盘影视资源搜索聚合工具源码

核心功能: 1. 聚合搜索:集成多个网盘资源搜索引擎,一站式查找影视、软件、资料。 2. 每日热点:内置科技与新闻热点聚合(Readhub),随时掌握最新动态。 3. 极简部署:采用 No-Build 模式…

作者头像 李华
网站建设 2026/2/26 0:11:46

最火流量主壁纸头像小程序源码

这是一款2025最火流量主壁纸头像小程序源码超美UI壁纸小程序带有流量主小程序并且特供图文超详细部署教程,喜欢的自行部署吧! 内涵配置域名和广告替换方法,搭建详细教程,带制作姓氏头像页面、星座匹配页面、九宫格拼图页面、创业…

作者头像 李华
网站建设 2026/2/24 12:08:59

简单升压稳压电路 LTspice 结果

简 介: 本文通过LTspice仿真分析了升压电路的工作特性。首先测量了电路的静态工作电流为3.47mA,并测试了不同负载下的转换效率:1kΩ负载时效率为58.9%,100Ω负载时效率达72.8%。实验发现输出电压随负载变化明显,100Ω时…

作者头像 李华
网站建设 2026/2/17 13:21:02

MySQL运维篇——日志和主从复制

日志(错误日志,二进制日志,查询日志,慢查询日志)(1)错误日志:服务器运行中发生错误时的相关信息 /var/log/show variables like ‘%log_error%’ ; —查看日志位置(2&…

作者头像 李华
网站建设 2026/2/18 20:24:34

Day 34 模块和库的导入

知识点: 1.导入官方库的三种手段 2.导入自定义库/模块的方式 3.导入库/模块的核心逻辑:找到根目录 使用案例 场景1: main.py和circle.py都在同一目录 场景2: main.py和circle.py都在根目录的子目录model/下 场景3: main.py在根目录,circ…

作者头像 李华