我有2个列表,我正在尝试根据第一个列表中的条件过滤第二个列表。
list1 = [ {'type': 'A', 'name': '1'},{'type': 'B', 'name': '2'},{'type': 'A', 'name': '3'}]
list2 = [100, 200, 300]
filtered_list1 = list(filter(lambda x: (x['type'] == 'A'), list1))
filtered_list2 = list(filter(lambda x: ??????????????????, list2))
# expected output
# filtered_list1 = [ {'type': 'A', 'name': '1'},{'type': 'A', 'name': '3'}]
# filtered_list2 = [100, 300]
我需要根据list1中的条件过滤list2中的元素。如何遍历两个列表?还是可以使用带有filter / lambda的索引?
答案 0 :(得分:4)
使用zip
成对访问相应的列表元素。然后,您可以在条件列表理解中解压缩这些压缩对,然后完成:
filtered_list2 = [ y for (x, y) in zip(list1, list2) if x["type"] == "A" ]
答案 1 :(得分:3)
您可以zip
同时遍历两个列表
>>> list1 = [ {'type': 'A', 'name': '1'},{'type': 'B', 'name': '2'},{'type': 'A', 'name': '3'}]
>>> list2 = [100, 200, 300]
>>>
>>> fil1, fil2 = zip(*((e1, e2) for e1, e2 in zip(list1, list2) if e1['type']=='A'))
>>>
>>> list(fil1)
[{'type': 'A', 'name': '1'}, {'type': 'A', 'name': '3'}]
>>> list(fil2)
[100, 300]
答案 2 :(得分:2)
这是将列表理解与enumerate
结合使用的一种方法,并根据条件保留两个列表中的值。您可以进一步zip
结果并将两个过滤列表分开保存,这样一个列表理解就足够
out = ((list1[i], list2[i]) for i, d in enumerate(list1) if d['type'] == 'A')
filtered_list1, filtered_list2 = list(zip(*out))
print(filtered_list1)
# ({'type': 'A', 'name': '1'}, {'type': 'A', 'name': '3'})
print(filtered_list2)
# (100, 300)
答案 3 :(得分:0)
尝试使用列表理解:
list1 = [ {'type': 'A', 'name': '1'},{'type': 'B', 'name': '2'},{'type': 'A', 'name': '3'}]
list2 = [100, 200, 300]
filtered_list1 = list(filter(lambda x: (x['type'] == 'A'), list1))
filtered_list2 = list(filter(lambda x: x in [int(l.get('name'))*100 for l in
filtered_list1], list2))