我才刚开始使用Python,并且很难用if
语句来解决问题。
说我有以下两个列表:
one = [{'id': '2'}, {'id': 3}]
two = [{'id': '4'}, {'id': 5}]
我想遍历one
并将id
的{{1}}与one
进行比较。基本上,我想查找的是两个列表是否共享具有相同值的two
。在此示例中,我的代码应返回id
,因为2不同于4和5,3不同于4和5。
基本上,我想做的是:检查Not found
是否等于2
中的任何id
,如果不相等,则打印一些内容,然后与two
相同。用伪代码是这样的:如果3
中没有id
等于two
中的2
,则打印一些内容。然后与3
相同,依此类推。
我尝试了以下操作:
for x in one:
for y in two:
if x['id'] != y['id']:
print('Not found')
此代码的问题是它将返回四个Not found
,因为它正在比较每个元素。相反,我只想检查2
中是否有3
或two
。
答案 0 :(得分:1)
请注意,您的代码中似乎有错误,您在第一个ID中使用字符串,而在第二个ID中使用整数。
有几种方法可以检查python中的交集。 Here's an article讨论了几种不同的方法。我喜欢使用set()
类型,因为它具有一个有用的内置方法,称为intersection
。集合与列表有点不同,因为它们不能包含重复项,并且会自动排序。
例如,如果您有一个包含1和2的集合,即set1 = set([1,2])
,则可以使用set1.intersection([2])
来检查2是否在该集合中。
这是在您的情况下(所有键均为整数)我将如何实现此类功能的方法:
one = [{'id': 2}, {'id': 3}]
two = [{'id': 4}, {'id': 5}]
def flatten(list_of_dicts):
return [item['id'] for item in list_of_dicts]
intersecting_ids = set(flatten(one)).intersection(flatten(two))