2014-09-09 3 views
0

그 안에 튜플이있는 목록이 있습니다. 서식은 다음과 같다 : 만 전자 메일 주소를 목록에리스트 안에있는 튜플의 값을 재귀 적으로 출력하는 방법은 무엇입니까?

>>> print list1 
[('CN=blah,OU=blah,DC=blah', {'mail': ['[email protected]']}), 
('CN=blah,OU=blah,DC=blah', {'mail': ['[email protected]']})]` 

내가 같이, 출력을 원하는 :

[email protected], [email protected] 

>>> list1 = [('CN=blah,OU=blah,DC=blah', {'mail': ['[email protected]']}), 
('CN=blah,OU=blah,DC=blah', {'mail': ['[email protected]']})]` 

인쇄 목록 1은 다음과 같은 출력을 생성 또는이 :

['[email protected]','[email protected]'] 

정확히 이것을 얼마나 정확하게 수행합니까?

+0

'메일'에 해당하는 목록에는 하나 이상의 이메일 주소가 포함됩니까? 그렇지 않다면 문자열 형식의리스트 형식을 사용하겠습니까? – hexparrot

답변

2
list1 = [('CN=blah,OU=blah,DC=blah', {'mail': ['[email protected]']}), ('CN=blah,OU=blah,DC=blah', {'mail': ['[email protected]']})] 
print [x[1]["mail"][0] for x in list1] 
['[email protected]', '[email protected]'] 

x[1]dict 그래서 x[1]["mail"]list에서 DICT 및 [0] 추출물 바로 이메일에서 값을 얻기 위해 키 mail를 사용하는 것입니다 두 번째 하위 요소입니다.

당신이 문자열을 추출 할 경우 이메일 목록에 str.join를 사용할 수 있습니다

" ".join([x[1]["mail"][0] for x in list1]) 
[email protected] [email protected] 

키가 존재하는지 검사 할 것입니다 키 mail없이 dicts있을 것 기회가있는 경우 첫째 if "mail" in x[1]와 :

[x[1]["mail"][0] for x in list1 if "mail" in x[1]] 

모든 두 번째 요소는이 경우 사용자가 점검 할 수 isinstace을 사용할 수 있습니다 하지 dicts은하지 않으면 먼저 :

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

빠른 답장을 보내 주셔서 감사합니다! 위에 제시된대로 기술을 사용하면 효과적입니다. 그러나 어떤 이유로 스크립트에서 생성 된 목록을 사용할 때 다음과 같은 오류가 발생합니다. '추적 (가장 최근 통화 마지막) : 파일 "ldaptest.py", 줄 13, 인쇄 [x [1 ] [ "mail"] [0] for mylist] TypeError : 목록 색인은 정수 여야하며 str이 아니어야합니다. 그 원인이 무엇일까요? – Matthew

+0

아아아, 그렇다면 두 번째 요소가 모두 딕트가 아니겠습니까? 나는 또 다른 수표를 추가 할 것이고, 당신은 x "1"에''if "mail"을 사용 했습니까? –

+0

'x [1]]''WORKS! '에 "mail"이 있으면 list1의 x에 대해 [x [1] [ "mail"] [0] 고마워요, 당신은 남자 Padraic입니다! – Matthew

관련 문제