如何在python中比较两个列表并通过电子邮件返回匹配项

如何在python中比较两个列表并通过电子邮件返回匹配项,python,list,Python,List,我想将电子邮件比较到两个列表中,并放入新列表中 a = [('abc@gmail.com',5),('xyz@gmail.com',6),('pqr@gmail.com',8)] b = [('ABC','abc@gmail.com'),('XYZ','xyz@gmail.com'),('PQR','pqr@gmail.com')] 例如,将返回[('ABC',5),('XYZ',6),('PQR',8)]。对两个列表进行排序并使用列表理解: a = [('abc@gmail.com',5)

我想将电子邮件比较到两个列表中,并放入新列表中

a = [('abc@gmail.com',5),('xyz@gmail.com',6),('pqr@gmail.com',8)]

b = [('ABC','abc@gmail.com'),('XYZ','xyz@gmail.com'),('PQR','pqr@gmail.com')]

例如,将返回
[('ABC',5),('XYZ',6),('PQR',8)]

对两个列表进行排序并使用列表理解:

a = [('abc@gmail.com',5),('xyz@gmail.com',6),('pqr@gmail.com',8)]

b = [('ABC','abc@gmail.com'),('XYZ','xyz@gmail.com'),('PQR','pqr@gmail.com')]

result = [(y[0],x[1]) for x,y in zip(sorted(a,key=lambda s:s[0])), sorted(b,key=lambda s:s[1])) if x[0]==y[1]]
列表a
基于每个元组的第一个元素(
s[0]
)进行排序


列表b
是根据每个元组的第二个元素(
s[1]
)排序的。

如果尚未排序,则在列表中查找每个项的复杂性为O(n),并且不是流程的理想数据结构

如果您将用于查找的列表转换为字典,这将是有益的

d_a = dict(a)
之后,查找既高效又优雅

>>> [(key, d_a[value]) for key, value in b if value in d_a]
[('ABC', 5), ('XYZ', 6), ('PQR', 8)]

当查找键可能不匹配或出现在查找列表中时,您还应考虑负面情况

允许或禁止重复电子邮件?如果禁止,请使用
dict