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

如何递归搜索含嵌套列表的Python字典并添加指定键值对?

递归搜索嵌套字典并添加键值对

需求描述

需要递归搜索包含嵌套列表的Python字典:键"c"的值是一个或多个字典组成的列表,结构可多层嵌套(嵌套深度不超过5层)。目标是找到所有ref='hij789'的字典(无论嵌套深度),并为每个该字典添加缺失的'b'='something'键值对。

示例字典结构

{
  'ref': 'abc123',
  'a': 'something',
  'b': 'something',
  'c': [{
    'ref': 'def456',
    'a': 'something',
    'b': 'something',
    'c': [{
      'ref': 'hij789',
      'a': 'something'
      }]
  },{
    'ref': 'klm012',
    'a': 'something',
    'b': 'something',
    'c': [{
      'ref': 'nop345',
      'a': 'something',
      'b': 'something',
      'c': [{
        'ref': 'hij789',
        'a': 'something'
      }]
    }]
  },{
    'ref': 'qrs678',
    'a': 'something',
    'b': 'something',
    'c': [{
      'ref': 'tuv901',
      'a': 'something'
    }]
  }]
}    

尝试过的代码(仅支持第一层嵌套)

l = next((n for n in mydict['c'] if n['ref'] == 'myref'), None)
l['b'] = 'somevalue'

解决方案:递归遍历函数

可以写一个递归函数,遍历所有层级的字典,检查目标条件并修改字典:

def update_target_dicts(data):
    # 处理单个字典
    if isinstance(data, dict):
        # 检查当前字典是否符合修改条件
        if data.get('ref') == 'hij789' and 'b' not in data:
            data['b'] = 'something'
        # 递归处理嵌套的c列表
        if 'c' in data and isinstance(data['c'], list):
            for item in data['c']:
                update_target_dicts(item)
    # 处理字典列表
    elif isinstance(data, list):
        for item in data:
            update_target_dicts(item)

使用方法

直接调用函数传入目标字典即可:

# 假设你的字典存储在my_dict变量中
update_target_dicts(my_dict)

逻辑说明

  1. 函数先判断传入数据的类型:
    • 若为字典,先检查是否是目标ref='hij789'且缺失b键,满足则添加键值对;接着检查是否存在嵌套的c列表,遍历列表元素递归处理。
    • 若为列表,遍历每个元素递归调用函数,覆盖所有层级的嵌套内容。
  2. 该方法无需关注具体嵌套深度,能自动处理所有符合结构的层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:25:20