字典(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

三、嵌套字典的常见用途

  1. 表示 JSON 数据:JSON 格式本质就是嵌套的键值对,Python 字典可以无缝转换为 JSON(反之亦然)。
  2. 配置文件:比如模型训练的配置参数,按层级分类(数据配置、模型配置、优化器配置等)。
  3. 复杂数据结构:比如 BERT 模型的详细输出(可能包含多层隐藏状态、注意力权重等嵌套信息):

    python

    # 模拟BERT输出的嵌套字典
    bert_output = {
        "last_hidden_state": [...],  # 张量数据
        "attentions": {  # 注意力权重嵌套字典
            "layer_1": [...],  # 第一层注意力权重
            "layer_2": [...],  # 第二层注意力权重
            # ... 更多层
        },
        "pooler_output": [...]
    }
    

四、注意事项

  1. 键的唯一性:同一层字典中,键(key)必须唯一,否则后面的键会覆盖前面的(比如{"a": 1, "a": 2}最终"a"的值是 2)。
  2. 键的类型:键必须是不可变类型(字符串、整数、元组等),不能用列表作为键(因为列表可变)。
  3. 嵌套深度:虽然理论上可以无限嵌套,但过深的嵌套会降低代码可读性,建议根据实际需求控制层级(比如不超过 5-6 层)。

总结:字典的键值对结构和嵌套能力,让它成为处理复杂层级数据的 “瑞士军刀”,无论是日常编程还是处理模型输出、JSON 数据等场景都非常常用。

Logo

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

更多推荐