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

如何基于映射字典更新嵌套字典中的指定键对应值(适配可变嵌套结构)

递归更新嵌套字典中的指定键值对

这个问题核心是处理嵌套不确定层级的数据替换,递归遍历是最适合的方案——既能处理字典又能处理列表嵌套的情况,不管数据结构多深都能覆盖到。我给你写个通用的实现,还能支持指定目标键的扩展场景:

原始数据

首先先明确我们的输入数据:

data = { "filter": { "and": [ { "or": [ { "and": [ {"category": "profile", "key": "languages", "operator": "IN", "value": "EN"}, {"category": "skill", "key": "26366", "value": 100, "operator": "EQ"}, ], }, ], }, {"or": [{"category": "skill", "key": "45165", "operator": "NE"}]}, {"or": [{"category": "skill", "key": "48834", "value": 80, "operator": "GT"}]}, {"or": [{"category": "profile", "key": "gender", "operator": "EQ", "value": "FEMALE"}]}, ], }, }
new_val = {'26366': '11616', '45165': '11613', '48834': '11618'}

通用递归替换函数

这个函数会遍历所有嵌套层级,自动识别字典和列表,替换所有匹配new_val键的值:

def update_nested_data(obj, replacements):
    if isinstance(obj, dict):
        # 遍历字典的每个键值对
        for k, v in obj.items():
            # 如果当前值在替换映射中,直接替换
            if v in replacements:
                obj[k] = replacements[v]
            # 递归处理值,处理深层嵌套
            update_nested_data(v, replacements)
    elif isinstance(obj, list):
        # 遍历列表中的每个元素,递归处理
        for i in range(len(obj)):
            update_nested_data(obj[i], replacements)
    return obj

# 调用函数(用copy避免修改原始字典,不需要的话可以去掉.copy())
updated_data = update_nested_data(data.copy(), new_val)

# 格式化打印结果
import json
print(json.dumps(updated_data, indent=2))

输出结果

运行后就能得到你期望的更新后数据:

{
  "filter": {
    "and": [
      {
        "or": [
          {
            "and": [
              {
                "category": "profile",
                "key": "languages",
                "operator": "IN",
                "value": "EN"
              },
              {
                "category": "skill",
                "key": "11616",
                "value": 100,
                "operator": "EQ"
              }
            ]
          }
        ]
      },
      {
        "or": [
          {
            "category": "skill",
            "key": "11613",
            "operator": "NE"
          }
        ]
      },
      {
        "or": [
          {
            "category": "skill",
            "key": "11618",
            "value": 80,
            "operator": "GT"
          }
        ]
      },
      {
        "or": [
          {
            "category": "profile",
            "key": "gender",
            "operator": "EQ",
            "value": "FEMALE"
          }
        ]
      }
    ]
  }
}

扩展:只替换指定键名下的值

如果需要更精准的控制——比如只替换key、skill_id、filter_id这些特定键对应的值,可以修改函数增加目标键参数:

def update_nested_data(obj, replacements, target_keys=None):
    # 默认目标键列表,可根据需求修改
    target_keys = target_keys or ["key", "skill_id", "filter_id"]
    if isinstance(obj, dict):
        for k, v in obj.items():
            # 只在目标键列表中,且值匹配时才替换
            if k in target_keys and v in replacements:
                obj[k] = replacements[v]
            update_nested_data(v, replacements, target_keys)
    elif isinstance(obj, list):
        for i in range(len(obj)):
            update_nested_data(obj[i], replacements, target_keys)
    return obj

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:57:33