1. 字典是什么? #

# 创建用户信息字典
user = {
    "id": 1,
    "name": "Alice",
    "active": True,
}

2. 创建与访问 #

# 空字典
empty = {}
# 创建含姓名和年龄的字典
person = {"name": "Bob", "age": 25}

# 直接访问:键不存在会 KeyError
print(person["name"])

# get:更安全,键不存在返回 None
print(person.get("email"))
# get 可设默认值,键不存在时返回 ""
print(person.get("email", ""))

3. 修改与删除 #

# 初始字典
person = {"name": "Bob", "age": 25}
# 修改已有键的值
person["age"] = 26
# 新增键值对
person["city"] = "Beijing"
# 批量更新多个键
person.update({"job": "dev"})
print(person)
# 另一个字典,用于合并
person2 = {"salary": 10000}
# 合并两个字典(Python 3.9+)
print(person | person2)
# 删除指定键
del person["city"]
# 删除键并返回值,无键时返回 None
role = person.pop("job", None)
print(role)

4. 遍历 #

# 初始字典
person = {"name": "Bob", "age": 25}
# 同时遍历键和值
for key, value in person.items():
    print(key, value)

# 默认只遍历键
for key in person:
    print(key)

# 判断键是否存在
if "name" in person:
    print("有 name 字段")

5. 常用模式 #

5.1 安全累加计数 #

# 初始化空字典用于计数
word_count = {}
# 遍历单词列表,累加每个单词出现次数
for word in ["apple", "banana", "apple"]:
    word_count[word] = word_count.get(word, 0) + 1
print(word_count)

5.2 嵌套字典(接口 JSON 常见) #

# 模拟接口返回的嵌套 JSON 结构
response = {
    "code": 200,
    "data": {"user_id": 10, "name": "Alice"},
}
# 通过两层键访问 user_id
print(response["data"]["user_id"])

5.3 列表转字典(按 id 索引) #

# 用户列表,每个元素是一个字典
users = [{"id": 1, "name": "A"}, {"id": 2, "name": "B"}]
# 以 id 为键,用户字典为值,便于按 id 快速查找
by_id = {u["id"]: u for u in users}
print(by_id[2]["name"])

5.4 JSON ↔ dict #

# 导入 json 模块
import json

# dict 转 JSON 字符串
d = {"name": "Tom", "age": 20}
s = json.dumps(d)
print(s)

# JSON 字符串转 dict
d2 = json.loads(s)
print(d2)

5.5 浅拷贝和深拷贝 #

# 导入 copy 模块
import copy

# 含嵌套列表的字典
d1 = {"a": 1, "b": [2, 3]}
# 浅拷贝,只复制最外层
d2 = d1.copy()

# 修改副本中的嵌套列表
d2["b"].append(4)

# 原字典的内层列表也被修改,因为浅拷贝共享嵌套对象
print(d1)
print(d2)
# 导入 copy 模块
import copy

# 含嵌套列表的字典
d1 = {"a": 1, "b": [2, 3]}
# 深拷贝,递归复制所有层级
d2 = copy.deepcopy(d1)

# 修改副本中的嵌套列表
d2["b"].append(4)

# 原字典不受影响
print(d1)
print(d2)

6. 项目开发要点 #