您可以通过将与日期相关的所有电子邮件收集到同一个键中来将其转换为字典。
为此,您需要使用defaultdict
from 集合。为字典中的新键赋予默认值是一种简单的方法。
这里我们传入函数 list
,这样字典中的每个新键都会得到一个列表作为默认值。
emails = defaultdict(list)
for email,email_date in list_of_tuples:
emails[email].append(email_date)
现在,您emails['2013-14-07']
将拥有该日期的电子邮件列表。
如果我们不使用defaultdict
, 并像这样进行字典理解:
emails = {x[1]:x[0] for x in list_of_tuples}
每个日期都有一个条目,这将是该日期的最后一封电子邮件,因为分配给相同的键将覆盖其值。字典是通过键查找值的最有效方式。如果您想通过它在一系列值中的位置来查找一个值(假设您知道它的位置),那么列表是很好的。
如果由于某种原因你不能重构它,你可以使用这个模板方法,它会创建一个生成器:
def find_by_date(haystack, needle):
for email, email_date in haystack:
if email_date == needle:
yield email
以下是您将如何使用它:
>>> email_list = [('foo@bar.com','2014-07-01'), ('zoo@foo.com', '2014-07-01'), ('a@b.com', '2014-07-03')]
>>> all_emails = list(find_by_date(email_list, '2014-07-01'))
>>> all_emails
['foo@bar.com', 'zoo@foo.com']
或者,您可以这样做:
>>> july_first = find_by_date(email_list, '2014-07-01')
>>> next(july_first)
'foo@bar.com'
>>> next(july_first)
'zoo@foo.com'