You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pythonic方法:如何将一个嵌套字典的属性更新至另一个?

问题描述

现有如下嵌套结构的动物分类数据:

[
  {
    "id": 1,
    "name": "Mammals",
    "animals": [
        {
            "id": 1,
            "name": "Chinchilla",
            "extinct": False
        },
        {
            "id": 2,
            "name": "Wooly Mammoth",
            "extinct": True
        }
    ]
  }
]

需要通过另一个结构相同的更新数据(例如将龙猫的extinct属性改为True)批量更新原数据的extinct字段。常规嵌套for循环加if判断的实现方式不够优雅,希望找到更Pythonic的解决办法。

更Pythonic的实现方案

方案一:构建扁平化映射实现快速更新

先将原数据转换为以(分类ID, 动物ID)为键的字典映射,后续更新时直接通过键定位目标动物,避免多层嵌套查找:

# 原数据
original_data = [
  {
    "id": 1,
    "name": "Mammals",
    "animals": [
        {"id": 1, "name": "Chinchilla", "extinct": False},
        {"id": 2, "name": "Wooly Mammoth", "extinct": True}
    ]
  }
]

# 更新数据
update_data = [
  {
    "id": 1,
    "name": "Mammals",
    "animals": [
        {"id": 1, "name": "Chinchilla", "extinct": True}
    ]
  }
]

# 构建动物映射表
animal_map = {}
for category in original_data:
    cat_id = category["id"]
    for animal in category["animals"]:
        animal_map[(cat_id, animal["id"])] = animal

# 执行更新
for update_cat in update_data:
    cat_id = update_cat["id"]
    for update_animal in update_cat["animals"]:
        key = (cat_id, update_animal["id"])
        if key in animal_map:
            animal_map[key]["extinct"] = update_animal["extinct"]

这种方式将嵌套查找的时间复杂度从O(n*m)降低到O(1),适合数据量较大、更新频繁的场景,代码逻辑清晰直观。

方案二:使用next()函数快速定位目标元素

利用生成器表达式结合next()直接定位需要更新的分类和动物,替代多层嵌套的循环判断:

# 执行更新
for update_cat in update_data:
    # 找到对应分类
    target_category = next(cat for cat in original_data if cat["id"] == update_cat["id"])
    # 更新对应动物的属性
    for update_animal in update_cat["animals"]:
        target_animal = next(animal for animal in target_category["animals"] if animal["id"] == update_animal["id"])
        target_animal["extinct"] = update_animal["extinct"]

该方案代码更紧凑,可读性强,适合小规模数据的更新场景。如果担心找不到对应元素报错,可以给next()添加默认值,例如next(..., None),再判断是否为None后执行更新。


内容的提问来源于stack exchange,提问作者David Perry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:47:35