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

Python中如何判断列表所有元素都存在于字典列表中并获取对应ID

实现方案

原代码错误原因

  • 变量名误用Python内置关键字dict,覆盖内置类型会导致后续调用字典相关功能时报错,建议替换为data这类语义化的普通变量名
  • 条件判断逻辑写反:原代码尝试判断整个name_list列表是否存在于单个用户的name字符串中,逻辑完全不成立,永远返回False

正确实现代码

利用集合的子集判断特性可以简洁高效完成需求:

# 原数据修改变量名,避免覆盖内置关键字
data = [
    { "id" : 1,
      "people" : [ { "name" : "Sarah",
                     "surename" : "something"
                   },
                   { "name" : "Luke",
                    "surename" : "something"
                   },
                   { "name" : "Chris",
                   "surename" : "something"
                   }
                 ]
    },
    { "id" : 2,
      "people" : [ { "name" : "Jhon",
                     "surename" : "something"
                   },
                   { "name" : "Luke",
                    "surename" : "something"
                   },
                   { "name" : "Ronald",
                   "surename" : "something"
                   }
                 ]
    }
]
name_list = ["Sarah", "Luke"]
result_ids = []
for item in data:
    # 提取当前条目下所有人员姓名转为集合
    exist_names = {p["name"] for p in item["people"]}
    # 判断目标姓名列表是否全部存在
    if set(name_list).issubset(exist_names):
        result_ids.append(item["id"])
        # 此处可添加你需要的后续操作

print(result_ids) # 输出结果为 [1],符合要求

如果需要更简洁的写法,也可以用列表推导式直接获取结果:

result_ids = [item["id"] for item in data if set(name_list).issubset({p["name"] for p in item["people"]})]

补充说明

如果你的name_list存在重复姓名,且要求重复姓名的匹配次数和列表中一致,可以用collections.Counter替换集合做判断,普通无重复的场景下用集合判断效率最高。

内容的提问来源于stack exchange,提问作者Mr.Noob4Life

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:36:03