字典(dict)的核心就是键值对(key-value) 结构,而值(value)可以是任何 Python 数据类型,包括另一个字典,甚至可以嵌套多层字典,形成 “无限套娃” 的结构(理论上只要内存允许
·
字典(dict)的核心就是键值对(key-value) 结构,而值(value)可以是任何 Python 数据类型,包括另一个字典,甚至可以嵌套多层字典,形成 “无限套娃” 的结构(理论上只要内存允许)。这种嵌套特性让字典非常适合表示复杂的层级数据(比如 JSON 数据、配置文件、嵌套的模型输出等)。
一、基础键值对示例
最简单的字典是单层键值对,键(key)通常是字符串或不可变类型,值(value)可以是任意类型:
python
# 单层字典:键是字符串,值是整数、字符串、列表等
person = {
"name": "Alice",
"age": 30,
"hobbies": ["reading", "hiking"] # 值可以是列表
}
# 访问值:通过键名
print(person["name"]) # 输出:Alice
print(person["hobbies"][0]) # 输出:reading
二、嵌套字典(套娃)示例
值可以是另一个字典,形成多层嵌套,模拟层级关系:
1. 两层嵌套
python
# 个人信息包含地址(地址是一个字典)
person = {
"name": "Bob",
"age": 25,
"address": { # 值是一个字典
"city": "Beijing",
"district": "Haidian",
"zipcode": "100080"
}
}
# 访问嵌套的值:逐层通过键名
print(person["address"]["city"]) # 输出:Beijing
print(person["address"]["zipcode"]) # 输出:100080
2. 多层嵌套(更深的套娃)
可以嵌套任意多层,比如表示公司部门结构:
python
company = {
"name": "Tech Corp",
"departments": { # 第一层嵌套:部门字典
"AI": { # 第二层嵌套:AI部门的详细信息
"manager": "Charlie",
"employees": [ # 值可以是列表,列表元素也可以是字典
{"name": "Dave", "role": "engineer"},
{"name": "Eve", "role": "researcher"}
]
},
"HR": { # 第二层嵌套:HR部门
"manager": "Frank",
"employees": [{"name": "Grace", "role": "recruiter"}]
}
}
}
# 访问深层值:逐层索引
print(company["departments"]["AI"]["manager"]) # 输出:Charlie
print(company["departments"]["AI"]["employees"][0]["name"]) # 输出:Dave
三、嵌套字典的常见用途
- 表示 JSON 数据:JSON 格式本质就是嵌套的键值对,Python 字典可以无缝转换为 JSON(反之亦然)。
- 配置文件:比如模型训练的配置参数,按层级分类(数据配置、模型配置、优化器配置等)。
- 复杂数据结构:比如 BERT 模型的详细输出(可能包含多层隐藏状态、注意力权重等嵌套信息):
python
# 模拟BERT输出的嵌套字典 bert_output = { "last_hidden_state": [...], # 张量数据 "attentions": { # 注意力权重嵌套字典 "layer_1": [...], # 第一层注意力权重 "layer_2": [...], # 第二层注意力权重 # ... 更多层 }, "pooler_output": [...] }
四、注意事项
- 键的唯一性:同一层字典中,键(key)必须唯一,否则后面的键会覆盖前面的(比如
{"a": 1, "a": 2}最终"a"的值是 2)。 - 键的类型:键必须是不可变类型(字符串、整数、元组等),不能用列表作为键(因为列表可变)。
- 嵌套深度:虽然理论上可以无限嵌套,但过深的嵌套会降低代码可读性,建议根据实际需求控制层级(比如不超过 5-6 层)。
总结:字典的键值对结构和嵌套能力,让它成为处理复杂层级数据的 “瑞士军刀”,无论是日常编程还是处理模型输出、JSON 数据等场景都非常常用。
更多推荐


所有评论(0)