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

时间:2015-06-24 09:28:15

标签: 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)]

2 个答案:

答案 0 :(得分:3)

在每个项目的列表中查找(如果尚未订购)是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)]

当查找键可能不匹配或存在于查找列表中时,您还应该考虑否定的情况

答案 1 :(得分:2)

对两个列表进行排序并使用列表推导:

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]]

list a根据每个元组的第一个元素(s[0])进行排序。

list b根据每个元组的第二个元素(s[1])进行排序。