[英]How can I check if an element is equal to none in another list of elements in Python?
我刚刚开始使用 Python,我很难用if
语句弄清楚一些事情。
假设我有以下两个列表:
one = [{'id': '2'}, {'id': 3}]
two = [{'id': '4'}, {'id': 5}]
我想遍历one
并比较id
的one
到two
。 基本上,我想要找到的是这两个列表是否共享一个具有相同值的id
。 在此示例中,我的代码应返回Not found
,因为 2 与 4 和 5 不同,而 3 与 4 和 5 不同。
基本上,我想做的是:检查2
是否等于任何id
的two
,如果不是,打印一些东西,然后与3
相同。 在伪代码中是这样的:如果two
EQUAL TO 2
中没有id
,则打印一些东西。 然后与3
相同,依此类推。
我尝试了以下方法:
for x in one:
for y in two:
if x['id'] != y['id']:
print('Not found')
这段代码的问题是它将返回四个Not found
,因为它正在比较每个元素。 相反,我只想检查是否有2
或3
in two
。
请注意,您的代码中出现了错误,您使用字符串作为第一个 ID,使用 integer 作为第二个 ID。
有几种方法可以检查 python 中的交叉点。这是一篇介绍几种不同方法的文章。 我喜欢使用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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.