【Python】字典
在 Python 中,字典(Dictionary) 是最常用、也是最强大的数据结构之一。它和我们现实生活中使用的字典非常相似:在现实中的字典里,你通过“拼音或部首”查找到具体的“释义”;在 Python 字典中,你通过**“键(Key)”来查找对应的“值(Value)”**。
这被称为**“键值对(Key-Value pairs)”**映射。
下面我们从零开始,一步步拆解 Python 字典的用法。
1. 字典的四大核心特征
- 通过键来访问: 字典里的元素没有索引(不像列表用
[0]、[1]访问),而是通过独一无二的“键”来获取“值”。 - 键必须是唯一的: 同一个字典里不能有两个相同的键。如果强行写入相同的键,后面的值会覆盖前面的值。
- 键必须是不可变类型: 字符串、数字、元组可以作为键;但列表、字典不能作为键。值(Value)则可以是任何数据类型。
- 有序性(Python 3.7+): 从 Python 3.7 开始,字典会记住你添加元素的顺序(在这之前的版本中,字典是无序的)。
2. 创建字典
创建字典主要使用大括号 {},键和值之间用冒号 : 隔开,不同的键值对用逗号 , 隔开。
1 | # 1. 创建一个空字典 |
3. 获取字典里的值(查)
获取值有两种常用方法:方括号 [] 和 .get() 方法。
方法 A:使用方括号 []
1 | print(person["name"]) # 输出: 张三 |
方法 B:使用 .get() 方法(推荐!)
这种方法更安全,如果键不存在,它不会报错,而是默认返回 None(或者你自定义的默认值)。
1 | print(person.get("age")) # 输出: 25 |
4. 添加和修改元素(增、改)
在字典中,添加新元素和修改旧元素的语法是一模一样的:如果键存在,就修改;如果键不存在,就新增。
1 | # 修改已有键的值 |
你也可以使用 .update() 方法一次性添加或修改多个键值对:
1 | person.update({"city": "上海", "hobby": "读书"}) |
不能使用.get()修改字典的值,.get() 是一个**只读(Read-only)**的操作。它的作用仅仅是去字典里“查询”并“返回”那个值给你,而不是给你一个可以直接修改底层数据的通道。
5. 删除元素(删)
有三种常见的删除方式:
del关键字: 直接删除指定的键值对。1
del person["is_student"]
.pop()方法: 删除并返回被删除的值。这在你想把删掉的数据拿去别的地方用时很有帮助。1
2job = person.pop("job")
print(job) # 输出: 程序员.clear()方法: 清空字典里的所有内容。1
2person.clear()
print(person) # 输出: {}
6. 遍历字典(循环)
如果你想用 for 循环把字典里的内容过一遍,有三种常用的视角:
1 | student_scores = {"小明": 90, "小红": 95, "小刚": 88} |
7. 字典嵌套 (Nested Dictionaries)
字典里的值也可以是另外一个字典,这非常适合用来表示复杂的数据结构(比如处理类似 JSON 的格式)。
1 | users = { |
8. 修改字典的键
能不能修改字典的键?
在 Python 中,字典的键是基于哈希表(Hash Table)实现的,这意味着一旦一个键被创建,它的“身份”就是固定的。你无法像重命名文件那样直接把 "age" 这个键名改成 "brother_age"。
但是,你可以通过**“搬家”**的方式来达到修改键名的效果:把旧键对应的值赋给新键,然后把旧键删掉。
这里有三种常见的方法来实现这个“改名”操作:
方法一:最优雅、最 Pythonic 的做法(使用 .pop())
这是最推荐的做法,一行代码搞定。.pop("age") 会把 "age" 的值(26)提取出来,同时把 "age" 从字典里删掉。然后我们直接把提取出来的值赋给新的键 "brother_age"。
1 | person = {"name": "张三", "age": 26} |
方法二:最容易理解的拆解法(分两步走)
如果你觉得上面的代码不够直观,可以把它拆分成两步:先给新键赋值,再删除旧键。
1 | person = {"name": "张三", "age": 26} |
⚠️ 进阶注意事项:如果旧键不存在怎么办?
在实际写代码时,如果使用上面两种方法,万一字典里本来就没有 "age" 这个键,程序就会报错(KeyError)。
1. 使用 if 提前检查(最直观、最稳妥,强烈推荐)
这是最符合人类直觉的做法:在动手“搬家”之前,先去房间里看一眼人到底在不在。在不在,决定了我们做不做。
1 | person = {"name": "张三", "job": "程序员"} # 注意:这里并没有 "age" 键 |
2. 给 .pop() 加上“默认值”(进阶用法)
.pop() 其实隐藏了一个高级功能:你可以给它传第二个参数作为“默认值”。 语法是:字典.pop(键名, 默认值)
它的逻辑是:
- 如果找到了键,就把它弹出来。
- 如果没找到键,它不会报错,而是直接返回你设置的“默认值”。
1 | person = {"name": "张三"} |
⚠️ 这里的避坑指南: 千万不要直接写成
1 | person["brother_age"] = person.pop("age", None) |
如果这么写,当 "age" 不存在时,.pop() 会返回 None,结果你的字典里就会莫名其妙多出一个废数据:
{'name': '张三', 'brother_age': None}。
所以配合 if 判断一下拿到的值是不是 None 是很有必要的。



