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

Python如何在嵌套字典列表中匹配查找指定嵌套条件的对应元素

嵌套字典多条件查找函数实现

问题根因

你最初使用needle.items() <= item.items()的判断逻辑仅能对比字典顶层的键值对,当查询条件包含嵌套结构时,会将整个嵌套字典作为值进行全等对比,因此{'name':{'lastname': 'gram'}}的name对应的值是仅包含lastname的字典,和stack中对应元素name完整字典不相等,导致匹配失败。

实现思路

  • 编写递归匹配辅助函数,支持任意深度的嵌套结构匹配,只要查询条件中指定的所有键路径对应的值和待匹配元素完全一致,即判定为匹配。
  • 遍历stack中每个元素,只要匹配任意一个needle条件就加入结果集,同时避免同一元素匹配多个needle时重复进入结果。

完整代码实现

def find(needles, stack):
    def matches_condition(item, condition):
        # 递归判断单个元素是否匹配单个查询条件
        for key, expected_val in condition.items():
            if key not in item:
                return False
            current_val = item[key]
            # 预期值为字典时递归判断嵌套结构
            if isinstance(expected_val, dict):
                if not isinstance(current_val, dict) or not matches_condition(current_val, expected_val):
                    return False
            else:
                # 非字典类型直接对比值
                if current_val != expected_val:
                    return False
        return True

    result = []
    for item in stack:
        # 匹配任意一个查询条件就保留
        for needle in needles:
            if matches_condition(item, needle):
                result.append(item)
                # 匹配到条件后跳出循环,避免重复添加
                break
    return result

调用测试

stack = [
         {'id': '1', 'name': {'firstname': 'bob', 'lastname': 'smith'}},
         {'id': '2', 'name': {'firstname': 'jane', 'lastname': 'abb'}},
         {'id': '3', 'name': {'firstname': 'flo', 'lastname': 'gram', 'middle': 'remi'}},
         {'id': '4', 'name': {'firstname': 'frank', 'lastname': 'glow'}, 'partner': 'diane'}
]
needles = [{'name':{'lastname': 'gram'}},
          {'partner': 'diane'}
]

print(find(needles, stack))

输出结果符合预期:

[{'id': '3', 'name': {'firstname': 'flo', 'lastname': 'gram', 'middle': 'remi'}}, {'id': '4', 'name': {'firstname': 'frank', 'lastname': 'glow'}, 'partner': 'diane'}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:15:04