Python 字典(Dictionary)详解:从入门到精通
·
1. 什么是字典?
字典(Dictionary)是 Python 中最强大、最常用的数据结构之一。它以键值对(key-value pair)的形式存储数据,通过键(key)来快速访问对应的值(value)。字典中的键必须是不可变类型(如字符串、数字、元组),而值可以是任意类型的 Python 对象。
2. 字典的创建
Python 提供了多种创建字典的方式:
2.1 使用花括号 {} 直接创建
# 创建空字典
empty_dict = {}
创建包含初始键值对的字典
person = {
"name": "张三",
"age": 25,
"city": "北京"
}
2.2 使用 dict() 构造函数
# 从键值对序列创建
person = dict(name="张三", age=25, city="北京")
从包含元组的列表创建
items = [("name", "张三"), ("age", 25), ("city", "北京")]
person = dict(items)
3. 字典的基本操作
3.1 访问字典元素
person = {"name": "张三", "age": 25}
使用键访问
print(person["name"]) # 输出:张三
使用 get() 方法(推荐,避免 KeyError)
print(person.get("age")) # 输出:25
print(person.get("city")) # 输出:None
print(person.get("city", "未知")) # 输出:未知(提供默认值)
3.2 添加和修改元素
person = {"name": "张三"}
添加新键值对
person["age"] = 25
person["city"] = "北京"
修改现有键的值
person["age"] = 26
使用 update() 方法批量更新
person.update({"age": 27, "job": "工程师"})
3.3 删除元素
person = {"name": "张三", "age": 25, "city": "北京"}
使用 del 语句
del person["city"]
使用 pop() 方法(返回被删除的值)
age = person.pop("age")
print(age) # 输出:25
使用 popitem() 删除最后一个键值对
key, value = person.popitem()
清空字典
person.clear()
3.4 检查键是否存在
person = {"name": "张三", "age": 25}
使用 in 关键字
if "name" in person:
print("姓名存在")
使用 keys() 方法
if "age" in person.keys():
print("年龄存在")
4. 字典的常用方法
| 方法 | 描述 | 示例 |
|---|---|---|
keys() |
返回所有键的视图 | person.keys() |
values() |
返回所有值的视图 | person.values() |
items() |
返回所有键值对的视图 | person.items() |
copy() |
返回字典的浅拷贝 | new_dict = person.copy() |
setdefault() |
获取键的值,如果键不存在则设置默认值 | person.setdefault("city", "北京") |
fromkeys() |
从序列创建新字典 | dict.fromkeys(["a", "b"], 0) |
5. 字典的遍历
5.1 遍历所有键
person = {"name": "张三", "age": 25, "city": "北京"}
直接遍历字典(默认遍历键)
for key in person:
print(key)
使用 keys() 方法
for key in person.keys():
print(key)
5.2 遍历所有值
for value in person.values():
print(value)
5.3 遍历所有键值对
for key, value in person.items():
print(f"{key}: {value}")
6. 字典的高级特性
6.1 嵌套字典
students = {
"001": {
"name": "张三",
"scores": {"math": 90, "english": 85}
},
"002": {
"name": "李四",
"scores": {"math": 88, "english": 92}
}
}
访问嵌套字典
print(students["001"]["name"]) # 输出:张三
print(students["001"]["scores"]["math"]) # 输出:90
6.2 字典合并
dict1 = {"a": 1, "b": 2}
dict2 = {"b": 3, "c": 4}
使用 | 运算符
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}
使用 |= 更新运算符
dict1 |= dict2 # dict1 变为 {'a': 1, 'b': 3, 'c': 4}
6.3 字典排序
scores = {"math": 90, "english": 85, "history": 88}
按键排序
sorted_by_key = dict(sorted(scores.items()))
结果:{'english': 85, 'history': 88, 'math': 90}
按值排序
sorted_by_value = dict(sorted(scores.items(), key=lambda x: x[1]))
结果:{'english': 85, 'history': 88, 'math': 90}
7. 字典与 JSON 的转换
import json
字典转 JSON 字符串
person = {"name": "张三", "age": 25}
json_str = json.dumps(person, ensure_ascii=False)
结果:'{"name": "张三", "age": 25}'
JSON 字符串转字典
person_dict = json.loads(json_str)
结果:{'name': '张三', 'age': 25}
字典保存到 JSON 文件
with open("person.json", "w", encoding="utf-8") as f:
json.dump(person, f, ensure_ascii=False)
从 JSON 文件读取字典
with open("person.json", "r", encoding="utf-8") as f:
loaded_person = json.load(f)
8. 常见应用场景
- 配置管理:存储应用程序的配置参数
- 数据缓存:缓存计算结果,避免重复计算
- 计数器:统计元素出现次数
- 映射关系:建立两个集合之间的对应关系
- API 响应:处理 JSON 格式的 API 返回数据
9. 性能注意事项
- 字典的查找、插入、删除操作的平均时间复杂度为 O(1)
- 字典占用的内存比列表大,因为需要存储哈希表
- 键的哈希值计算应尽量快速,避免使用复杂的自定义对象作为键
- Python 3.7+ 中字典保持插入顺序,但不应依赖此特性进行排序
10. 总结
字典是 Python 编程中不可或缺的数据结构,掌握字典的使用能够大大提高代码的效率和可读性。记住以下要点:
- 字典通过键值对存储数据,键必须是不可变类型
- 使用
get()方法安全访问字典元素 - 合理使用字典推导式可以简化代码
- 注意字典与 JSON 的相互转换
- 根据实际需求选择合适的数据结构
更多推荐



所有评论(0)