如何从对象列表list2中筛选a1属性值匹配list1的对象
解决方案
高效实现(推荐)
先从list1中提取所有a1属性的值存入集合,利用集合O(1)的查找效率快速筛选list2中的目标对象:
# 提取list1中所有a1的值到集合 list1_a1_values = {obj["a1"] for obj in list1} # 筛选list2中a1值在集合中的对象 matched_objects = [obj for obj in list2 if obj["a1"] in list1_a1_values]
基础遍历实现(适合理解逻辑)
如果数据量较小,不需要考虑性能,也可以直接嵌套遍历两个列表,逐一比对a1的值:
matched_objects = [] for obj2 in list2: for obj1 in list1: if obj2["a1"] == obj1["a1"]: matched_objects.append(obj2) break # 找到匹配项后停止当前对象的后续比对
示例验证
用你提供的示例数据测试:
list1 = [ {"a1":0, "a2":5, "a3":4}, {"a1":2, "a2":3, "a3":1} ] list2 = [ {"a1":0, "a2":3, "a3":1}, {"a1":3, "a2":1, "a3":0} ] # 执行高效方案 list1_a1_values = {obj["a1"] for obj in list1} matched_objects = [obj for obj in list2 if obj["a1"] in list1_a1_values] print(matched_objects)
输出结果:
[{'a1': 0, 'a2': 3, 'a3': 1}]
与预期一致,list2中的第一个对象被成功筛选出来。
内容的提问来源于stack exchange,提问作者kevinjaypatel
相关产品推荐
相关产品推荐

