2012-08-01 2 views
9

I는 사전 이름과 항목의 특성 값의 값 부분에 추가 해요 . 그런 다음 나중에이 값 문자열을 처리 할 때 탭을 분할하고 for 루프를 사용하여 목록을 반복합니다.파이썬 루프 액세스 한번에 두 요소

for 루프의 이름과 값에 모두 액세스하려면 어떻게해야합니까? 각 속성에 관해서는 이름과 값을 하나씩 가져 와서 파일에 쓰고 싶습니다. 현재 목록과 같이 보인다 :

[A, B, A, B, A, B, A, B]

와 각각, 내가 쓰고 싶은 B에 대한

:

'<'태그 이름은 '>'B '<'/ 태그 '>'

+0

많은 수의 문자열 연결에 대해 + =를 사용하지 마십시오. iterable을 만들고 join을 대신 사용하십시오. –

답변

16

단계 사이즈 2 목록을 반복하고 이름을 얻고 각각의 반복을 통해 각각의 태그를 추가 할 수 있습니다 ... =

for i in range(0,len(list1),2): 
    name = list1[i] 
    tag = list1[i+1] 
    print '<tag name="%s">%s</tag>' % (name, tag) 
4

편집 :

# assuming you converted your list to a dictionary called values 

for k in values: 
    print '<tag name="%s">%s</tag>' % (k, values[k]) 

편집 : 나는 사전의 키를 반복 한 다음 convert your list to a dictionary해야한다고 생각하고,

... 다음, 경우 키는 고유하고, 순서는 중요하지 않습니다 : 결과를 출력하기 위해 사전이 필요하지 않다면 게시 된 다른 대답이 아마도 더 좋은 방법 일 것입니다. 문자열 + = 문자열 2를 사용

+0

사전이 일반적으로 사용하는 것처럼 name : value 이외의 다른 방법으로 자연스럽게 연결되는 경우 튜플로 저장할 수 있습니다. 나는'dict'이 좋은 해결책이 전반적으로 당신과 동의하는 경향이 있지만 – CosmicComputer

+0

,이 경우 변환이 아닌 사소한입니다. OP는 'dict'을 채울 때 키가 이미 있는지 확인하기 위해주의를 기울여야합니다. 키에 이미 값을 추가해야하는 대신 덮어 쓰지 않아도됩니다. – jmetz

+0

dicts도 주문을 잃지 않습니까? –

4

우선은, 때마다 새로운 문자열을 복사으로, 나쁜 생각이다.

value+=child.get('name') + '\t' + child.text + '\t' 

인쇄 할 때 다음, 단순히

for name,text in values: 
    print '<tag name="{name}">{text}</tag>'.format(name=name,text=text) 

을 어떤 이유로, 당신이 정말로 탭을 원한다면, 당신은 값 생성자를 변경해야합니다

values = ((child.get('name'),child.text) for child in children) 

해야한다 (발전기)에서 목록과에 수행

''.join((name+'\t'+value+'\t' for name,value in values))[:-1] 
+0

, 나는이 지금까지 영업 이익은 멀리 목록 방식에서 전환 마음을하지 않을 경우 최고 (가장 파이썬) 접근 방식이라고 생각합니다. – jmetz

+0

동의합니다. 탭을 구분 기호로 사용하여 다른 곳에 분리하면 아무런 의미가 없습니다. 이는 훨씬 더 깔끔하고 나은 방법입니다. –