Python 如何递归打印列表中的元组值?
我有一个里面有元组的列表。格式如下:Python 如何递归打印列表中的元组值?,python,Python,我有一个里面有元组的列表。格式如下: >>> list1 = [('CN=blah,OU=blah,DC=blah', {'mail': ['email1@mail.com']}), ('CN=blah,OU=blah,DC=blah', {'mail': ['email2@mail.com']})]` 打印列表1会产生以下输出: >>> print list1 [('CN=blah,OU=blah,DC=blah', {'mail': ['email1@m
>>> list1 = [('CN=blah,OU=blah,DC=blah', {'mail': ['email1@mail.com']}),
('CN=blah,OU=blah,DC=blah', {'mail': ['email2@mail.com']})]`
打印列表1会产生以下输出:
>>> 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']
我究竟如何做到这一点
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]
仅从列表中提取电子邮件
如果要提取可在电子邮件列表中使用的字符串:
" ".join([x[1]["mail"][0] for x in list1])
email1@mail.com email2@mail.com
如果有可能在没有键的情况下出现dicts
mail
,您需要首先使用检查键是否存在,如果x[1]
中有“mail”:
[x[1]["mail"][0] for x in list1 if "mail" in x[1]]
如果并非所有第二个元素都是dict,则可以使用isinstace首先检查它是否是dict:
" ".join([x[1]["mail"][0] for x in list1 if isinstance(x[1],dict) and "mail" in x[1] ])
与“邮件”对应的列表中是否会有不止一个电子邮件地址?如果没有,您是否承诺在那里使用列表类型,而字符串就可以了?谢谢您的快速回复!当我使用上面介绍的技巧时,效果非常好。但是由于某种原因,当我使用脚本生成的列表时,我得到了以下错误:Traceback(最近一次调用):文件“ldaptest.py”,第13行,在print[x[1][“mail”][0]for x in mylist]TypeError:list索引必须是整数,not str
知道是什么原因导致的吗?啊,好吧,所以不是所有的第二个元素都是dicts?我将添加另一个检查,如果x[1]
中的“邮件”有效,您是否使用了x[1]中的“邮件”?[x[1][“邮件”][0]来检查列表1中的x!非常感谢你,你就是帕德雷克!不用担心,不客气,我将把I实例留在,因为从技术上讲,您可以在x[1]
中使用“邮件”,而不是命令。