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 编程中不可或缺的数据结构,掌握字典的使用能够大大提高代码的效率和可读性。记住以下要点:

  1. 字典通过键值对存储数据,键必须是不可变类型
  2. 使用 get() 方法安全访问字典元素
  3. 合理使用字典推导式可以简化代码
  4. 注意字典与 JSON 的相互转换
  5. 根据实际需求选择合适的数据结构
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐