如何从python字典中提取电子邮件作为键值对?

2024-04-27 19:14:28 发布

您现在位置:Python中文网/ 问答频道 /正文

从下面的字典结构,我如何提取和打印电子邮件地址?E、 我想看看斯梅尔。大卫@gmail“4,”sdusa@yahoo.com'1等

dict_items([('10:04:14', 1), ('3', 6), ('Thu', 6), ('19:51:21', 1),
('2008',27),  ('From', 27), ('11:35:08', 1), ('5', 1),
('sntp@hotmail.com', 3), ('Jan', 27), ('15:46:24', 1), ('14:50:18',
1),  ('11:37:30', 1), ('18:10:48', 1), ('17:07:00', 1), ('09:05:31',
1),  ('10:38:42', 1), ('sdusa@yahoo.com', 1),
('samuel.david@gmail.com', 4) ])

Tags: fromcom字典电子邮件地址items结构大卫
3条回答

您可以迭代这些键,并且只获取包含@的键(假设所有键都是小时或电子邮件地址):

d = dict([('10:04:14', 1), ('3', 6), ('Thu', 6), ('19:51:21', 1), ('2008',27),  ('From', 27), ('11:35:08', 1), ('5', 1), ('sntp@hotmail.com', 3), ('Jan', 27), ('15:46:24', 1), ('14:50:18', 1),  ('11:37:30', 1), ('18:10:48', 1), ('17:07:00', 1), ('09:05:31', 1),  ('10:38:42', 1), ('sdusa@yahoo.com', 1), ('samuel.david@gmail.com', 4) ])

for key in d:
    if "@" in key:
        print(key)

输出

^{pr2}$

假设:

>>> d=dict([('10:04:14', 1), ('3', 6), ('Thu', 6), ('19:51:21', 1),
... ('2008',27),  ('From', 27), ('11:35:08', 1), ('5', 1),
... ('sntp@hotmail.com', 3), ('Jan', 27), ('15:46:24', 1), ('14:50:18',
... 1),  ('11:37:30', 1), ('18:10:48', 1), ('17:07:00', 1), ('09:05:31',
... 1),  ('10:38:42', 1), ('sdusa@yahoo.com', 1),
... ('samuel.david@gmail.com', 4) ])

如果地址是您显示的类型,则可以在键上使用filter

^{pr2}$

但是,如果您可能有更完整的字符串来表示'Comment' <address>类型(或混合)的RFC822电子邮件地址,则可能需要使用email.utils.parseaddr()将注释(或实名)与实际地址分开:

>>> from email.utils import parseaddr
>>> parseaddr('"Santa" <Santa@np.org>')
('Santa', 'Santa@np.org')

那么:

>>> d=dict([('10:04:14', 1), ('3', 6), ('Thu', 6), ('19:51:21', 1),
... ('2008',27),  ('From', 27), ('11:35:08', 1), ('5', 1),
... ('sntp@hotmail.com', 3), ('Jan', 27), ('15:46:24', 1), ('14:50:18',
... 1),  ('11:37:30', 1), ('18:10:48', 1), ('17:07:00', 1), ('09:05:31',
... 1),  ('10:38:42', 1), ('sdusa@yahoo.com', 1),
... ('"Sammy Davis, Jr." <samuel.david@gmail.com>', 4) ])
>>> 
>>> from email.utils import parseaddr
>>> [parseaddr(s)[1] for s in d.keys() if '@' in parseaddr(s)[1]]
['sntp@hotmail.com', 'samuel.david@gmail.com', 'sdusa@yahoo.com']

注意:parseaddr只分离有效但完整的RFC822地址的各个部分;它不验证它是否是一个真正的地址。在

使用dict comprehensions

d = dict([('10:04:14', 1), ('3', 6), ('Thu', 6), ('19:51:21', 1),('2008',27),  ('From', 27), ('11:35:08', 1), ('5', 1),('sntp@hotmail.com', 3), ('Jan', 27), ('15:46:24', 1), ('14:50:18',1),  ('11:37:30', 1), ('18:10:48', 1), ('17:07:00', 1), ('09:05:31',1),  ('10:38:42', 1), ('sdusa@yahoo.com', 1),('samuel.david@gmail.com', 4) ])

{email:val for email, val in d.items() if '@' in email }

输出:

^{pr2}$

相关问题 更多 >