2014-04-18 3 views
1

일치하는 if 조건에 대해 파이썬 사전에 문자열의 한 문자를 어떻게 바꿉니 까? 을 감안할 때파이썬 : 사전 값 하나의 대체 문자

:

if key[-1] == "d" and val[-1] == "t": 
    print key, val 

versed v3rst 
vexed vEkst 
voiced vOIst 

내가 마지막 문자 "T"s의 "D"의를 변경하고 싶습니다. 나는 시도 :

val[-1] = val[-1].replace("t", "d") 
TypeError: 'str' object does not support item assignment 

모든 팁 :

if key[-1] == "d" and val[-1] == "t": 
    val[-1] = val[-1].replace("t", "d") 
    print key, val 

그러나 나는 오류가? 그것은 단순한 if와 replace처럼 보입니다.

+1

문자열을 변경할 수 없습니다. 문자열을 제 자리에서 수정할 수는 없습니다. 모든 것을 새로운 대상으로 교체해야합니다. – geoffspear

답변

5

문자열은 변경할 수 없으므로 할당으로 문자를 변경할 수 없습니다. 예를 들면, replace을 사용할 수 있습니다. 마지막 문자를 변경할 수 있지만

val = val.replace(...) 

이 필요합니다

val = val[:-1] + val[-1].replace(...) 

또는 단지 :

val = val[:-1] + "d" 

그러나, 이것은 여전히 ​​사전을 업데이트하지 않습니다, 문자열이 불변 다시 때문에 이것은 새로운 객체를 생성합니다. 그렇게하려면 그들이 불변을하기 때문에, 오류가 말한다

d[key] = ... 
+2

'''repalce()'''는 모든'''''''''d''s로 바꿀 것입니다. 나는 OP가 원하는 것만 믿지 않습니다. ''val = val [: - 1] + "d"''는 작동해야합니다. – wnnmaw

+0

@wnnmaw 좋은 지적으로, 나는 그 효과에 메모를 추가 할 것입니다. – jonrsharpe

1

으로, 문자열을 수정할 수 없습니다 (예를 들어 http://effbot.org/pyfaq/why-are-python-strings-immutable.htm 참조).

당신은 당신이 원하는 것을 할 필요가 다음을 수행 할 수 있습니다

if key[-1] == "d" and val[-1] == "t": 
    val = "%sd" % val[:-1] # Take the val, except the last character and add a "d" 
    print key, val 

당신은 그렇지 않으면도 (d하여 문자열의 시작 부분에서 사람들을 모든 t 변경됩니다, 여기 replace을 사용할 수 없습니다 문자열의)