在 Python 的世界里,除了列表(list)和元组(tuple)这样的序列类型 ,还有一种更灵活的数据结构------字典(dict) 。 如果说列表像"有序的货架",那么字典就像"带标签的抽屉":每个数据都有一个唯一的"名字",叫做 键(key)。
字典是 Python 最常用、最强大的数据结构之一。它能高效地存储和查找数据,被广泛用于配置、数据映射、缓存、对象建模等场景。
一 什么是字典
字典(Dictionary)是一种 键值对(key-value) 的数据结构。 它以 键(key) 定位对应的 值(value),而不是通过索引。
语法格式如下:
python
# 创建字典
person = {"name": "Alice", "age": 25, "city": "Beijing"}
结构理解:
- 键(key)就像标签,必须是唯一且不可变的对象(如字符串、数字、元组);
- 值(value)可以是任意类型;
- 使用大括号
{}包裹多个键值对,每对之间用逗号分隔。
二 字典的创建方式
1. 使用大括号直接创建
python
student = {"name": "Tom", "age": 20, "grade": "A"}
2. 使用 dict() 函数
python
student = dict(name="Tom", age=20, grade="A")
3. 从键值对列表创建
python
student = dict([("name", "Tom"), ("age", 20), ("grade", "A")])
4. 使用 fromkeys() 创建具有相同值的字典
python
keys = ["a", "b", "c"]
d = dict.fromkeys(keys, 0)
print(d) # {'a': 0, 'b': 0, 'c': 0}
三 访问与修改字典
1. 按键访问
python
person = {"name": "Alice", "age": 25}
print(person["name"]) # Alice
如果访问不存在的键,会报错:
python
print(person["gender"]) # KeyError
2. 使用 get() 安全访问
python
print(person.get("gender", "未知")) # 未知
get() 不存在的键时返回默认值,不会报错。
3. 修改与新增键值对
python
person["age"] = 26 # 修改
person["city"] = "Beijing" # 新增
print(person)
4. 删除键值对
python
del person["city"] # 删除指定键
person.pop("age") # 删除并返回该值
person.clear() # 清空整个字典
四 遍历字典
字典支持三种主要遍历方式:
python
person = {"name": "Alice", "age": 25, "city": "Beijing"}
# 遍历键
for key in person.keys():
print(key)
# 遍历值
for value in person.values():
print(value)
# 遍历键值对
for key, value in person.items():
print(key, "=>", value)
输出:
ini
name => Alice
age => 25
city => Beijing
五 字典的常用方法
| 方法 | 作用 |
|---|---|
dict.keys() |
返回所有键 |
dict.values() |
返回所有值 |
dict.items() |
返回键值对元组 |
dict.get(key, default) |
获取指定键的值 |
dict.pop(key) |
删除并返回指定键的值 |
dict.update(other) |
合并其他字典 |
dict.copy() |
返回字典的浅拷贝 |
dict.clear() |
清空字典内容 |
示例:
python
user = {"name": "Tom", "age": 20}
extra = {"city": "Shanghai"}
user.update(extra)
print(user) # {'name': 'Tom', 'age': 20, 'city': 'Shanghai'}
六 字典的键(key)必须可哈希
字典的键必须是不可变类型,比如字符串、整数或元组。 以下写法是合法的:
python
d = {
"name": "Lucy",
1: "数字键",
(1, 2): "元组键"
}
但以下是错误的:
python
d = {[1, 2]: "列表键"} # ❌ TypeError: unhashable type: 'list'
七 字典推导式
Python 还支持使用 推导式(dict comprehension) 来快速生成字典。
示例:
python
squares = {x: x**2 for x in range(1, 6)}
print(squares)
输出:
yaml
{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
还可以使用条件过滤:
python
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares)
# {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
八 实战案例:学生成绩统计
python
scores = {
"Tom": 88,
"Lucy": 92,
"Jack": 76
}
# 输出最高分
max_name = max(scores, key=scores.get)
print(f"最高分是 {max_name}:{scores[max_name]}")
# 计算平均分
avg_score = sum(scores.values()) / len(scores)
print(f"平均分是 {avg_score:.2f}")
输出:
最高分是 Lucy:92
平均分是 85.33
字典的灵活键值访问使得数据处理变得直观高效。
九 小结
| 特点 | 说明 |
|---|---|
| 数据结构 | 键值对(key-value) |
| 是否有序 | Python 3.7+ 起默认保持插入顺序 |
| 键是否唯一 | ✅ 唯一 |
| 键是否可变 | ❌ 不可变 |
| 常用操作 | 访问、修改、删除、遍历、合并 |
| 推导式 | 支持字典推导式创建新字典 |
🔹 总结
- 字典是 Python 中最灵活的数据容器,用于键值对映射。
- 键必须是不可变对象(如字符串、数字、元组)。
- 使用
{}定义,支持各种创建与遍历方式。 get()、items()、update()等方法是开发中最常用的。- 字典推导式让生成复杂结构变得简洁高效。