2014-10-30 2 views
0

각 반복마다 사전에있는 목록에서 다음 항목을 선택하고 텍스트의 키를 현재 항목으로 바꾸는 python 스크립트를 만들려고합니다. 그러나 문제는 변수에 의해 설정된 정수와 일치하는 목록 항목을 반환하지 않는다는 것입니다.Python이 변수별로 특정 목록 항목을 반환하지 않습니다.

코드 :

for x in range(0,runs): 
    for k,v in shortcodes.iteritems(): 
     description = description.replace('{'+k+'}', v[x]) 
    print description 

단순히 오히려 증가보다는 목록 항목과 텍스트에 키 값을 대체하고 있습니다. x을 수동으로 제거하고 더 높은 정수로 설정하면 올바르게 응답합니다. 마찬가지로, 성실함을 위해서, x이 계속 진행됨에 따라 x이 증가하고 있음을 확인합니다.

그럼 왜 x을 무시하고 0으로 머물러야합니까?

답변

1

코드에있는 것은 for 루프가 키워드를 첫 번째 반복으로 바꿉니다. 다른 모든 반복에는 대체 할 키워드가 없습니다. 모든 키워드를 값 항목의 첫 번째 요소로 대체했기 때문입니다.

내가 더 유망한 솔루션

for k,v in shortcodes.iteritems(): 
    for x in v: 
     index = description.find('{'+k+'}') 
     description[index:index+len('{'+k+'}')] = description[index:index+len('{'+k+'}')].replace('{'+k+'}', x) 
print description 

이제 각 키 대신 다른 방법으로 주위에 대한 귀하의 valuelist을 통해 itereate이 같은 생각, 하고 anoter 값으로 모든 키워드를 변경할 수 있기 때문에, 변경할 하위 문자열 만 바꿉니다. find()으로 실제 문자열에서 하위 문자열의 가장 낮은 인덱스 위치를 얻습니다. len()을 사용하면 매개 변수 값의 다리를 얻을 수 있습니다.

+0

그래도 문제는 지적하지 않았습니까? 다른 말로하면 더 큰 문제는'description = description.replace ('{'+ k + '}', x)'는 실제로'new_description = description.replace ('{'+ k + '}', x)'맞죠? – Tim

+0

아, 맞습니다.하지만 새로운 문제입니다. 이제는 문자열 전체가 매번 바뀌기 때문에 새로운 값으로 바뀝니다. ' '{'+ k + '}''가 들어있는 하위 문자열 만 바꾸면됩니다.'find'를 사용하여 문자열에서 색인을 찾을 수 있습니다. – muthan

+0

아주 좋습니다! 나는'find'와'index'에 대해 좀 더 연구해야 할 것입니다. – Tim

관련 문제