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

如何修改递归函数捕获extras的兄弟键cat及父键id并合并结果?

递归获取字典中目标键值并合并兄弟/父键的解决方案

我理解你的需求:原来的findkeys函数可以递归提取所有extras键的值,但现在需要把每个extras对应的兄弟键cat和上层父键id也合并到结果里,而且product类的键名不固定(比如product/products/produkt),必须先定位extras再关联对应的兄弟和父键。

修改后的递归函数

def findkeys(node, kv, parent=None):
    if isinstance(node, list):
        for i in node:
            yield from findkeys(i, kv, parent=node)
    elif isinstance(node, dict):
        if kv in node:
            # 复制extras的内容作为基础结果
            result = node[kv].copy()
            # 添加兄弟键cat(如果存在)
            if 'cat' in node:
                result['cat'] = node['cat']
            # 添加父节点的id(如果父节点存在且包含id)
            if parent is not None and 'id' in parent:
                result['id'] = parent['id']
            yield result
        # 遍历字典值,传递当前字典作为子节点的父节点
        for j in node.values():
            yield from findkeys(j, kv, parent=node)

核心思路说明

  1. 新增父节点参数:通过parent参数在递归过程中传递当前节点的父节点信息,这样当找到extras时,能直接获取到上层的id值。
  2. 合并键值对:
    • 找到extras后,先复制它的内容到结果字典(避免修改原数据)。
    • 从extras所在的字典中提取兄弟键cat(因为extras和cat是同一层级的键)。
    • 从parent(也就是包含product类键的上层字典)中提取id值。
  3. 兼容不固定键名:不需要关心product类的具体键名,只要定位到包含extras的字典,就能关联到对应的兄弟和父键,完美适配你给出的测试数据。

测试验证

用你提供的测试字典:

test_dict = { 
    "contents":[ 
        { "product":{ "extras":{ "size":"large", "color":"green", "name":"shirt" }, "cat":"male" }, "id":"a12b" }, 
        { "products":{ "extras":{ "size":"small", "color":"red", "name":"trouser" }, "cat":"male", "price":12.21 }, "id":"a23b" }, 
        { "produkt":{ "extras":{ "size":"medium", "color":"yellow", "name":"hat" }, "cat":"female", "price":2.87, "units":100 }, "id":"a34b" } 
    ] 
}

# 调用函数并输出结果
print(list(findkeys(test_dict, 'extras')))

输出结果完全符合你的期望:

[
    {'size': 'large', 'color': 'green', 'name': 'shirt', 'cat': 'male', 'id': 'a12b'},
    {'size': 'small', 'color': 'red', 'name': 'trouser', 'cat': 'male', 'id': 'a23b'},
    {'size': 'medium', 'color': 'yellow', 'name': 'hat', 'cat': 'female', 'id': 'a34b'}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:21:36