2014-04-18 48 views
1

如何爲一個匹配的if條件替換Python字典的字符串中的單個字符?Python:替換字典值中的單個字符

考慮:

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

versed v3rst 
vexed vEkst 
voiced vOIst 

我想改變最後的字母 「T」 s到 「d」 S。我想:

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

但是我得到的錯誤:

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

任何提示嗎?這似乎是一個簡單的如果和替換。

+1

字符串是不可變的。你不能修改一個字符串;你必須用新對象來替換整個事物。 – geoffspear

回答

5

字符串是不可變的,你不能通過賦值來改變字符。你可以使用replace,如果你這樣做的話。

val = val.replace(...) 

但只改變的最後一個字符,你需要:

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

或者只是:

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

然而,這仍然不會更新字典,再次因爲字符串是不可變這創建了一個新的對象。要做到這一點:

d[key] = ... 
+2

'''repalce()'''會把所有的''''''''改成''''''''我不相信是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 

不能使用replace這裏,否則會被d改變每t在字符串中(即使是在開始的字符串)