如何以递归方式打印列表中的元组值?

时间:2014-09-09 22:49:58

标签: python

我有一个包含元组的列表。格式如下:

>>> list1 = [('CN=blah,OU=blah,DC=blah', {'mail': ['email1@mail.com']}),
('CN=blah,OU=blah,DC=blah', {'mail': ['email2@mail.com']})]`

print list1产生以下输出:

>>> print list1
[('CN=blah,OU=blah,DC=blah', {'mail': ['email1@mail.com']}),
 ('CN=blah,OU=blah,DC=blah', {'mail': ['email2@mail.com']})]`

我希望输出只列出电子邮件地址,如下所示:

email1@mail.com, email2@mail.com

或者这个:

['email1@mail.com','email2@mail.com']

我究竟如何做到这一点?

1 个答案:

答案 0 :(得分:2)

list1 = [('CN=blah,OU=blah,DC=blah', {'mail': ['email1@mail.com']}), ('CN=blah,OU=blah,DC=blah', {'mail': ['email2@mail.com']})]
print [x[1]["mail"][0] for x in list1]
['email1@mail.com', 'email2@mail.com']

x[1]是您的dict的第二个子元素,因此x[1]["mail"]使用键mail从dict获取值,[0]只提取list来自" ".join([x[1]["mail"][0] for x in list1]) email1@mail.com email2@mail.com 的电子邮件。

如果要提取字符串,可以在电子邮件列表中使用str.join

dicts

如果有可能mail没有密钥if "mail" in x[1],您可能需要先检查密钥是否存在[x[1]["mail"][0] for x in list1 if "mail" in x[1]]

" ".join([x[1]["mail"][0] for x in list1 if isinstance(x[1],dict) and  "mail" in x[1] ])

如果不是所有的第二个元素都那么你可以使用isinstace来检查它是否是dict:

{{1}}