【问题标题】:Python: replace single character in value of dictionaryPython:替换字典值中的单个字符
【发布时间】:2014-06-03 09:10:55
【问题描述】:

如何为匹配的 if 条件替换 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

有什么建议吗?这似乎是一个简单的 if 和 replace。

【问题讨论】:

  • 字符串是不可变的。您不能就地修改字符串;你必须用一个新对象替换整个东西。

标签: python string dictionary replace


【解决方案1】:

字符串是不可变的,你不能通过赋值来改变一个字符。你可以使用replace,例如

val = val.replace(...)

但只更改您需要的最后一个字符:

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

或者只是:

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

但是,这仍然不会更新字典,因为字符串是不可变的,这会创建一个新对象。为此:

d[key] = ...

【讨论】:

  • repalce() 会将所有 ts 更改为 ds,我不相信这是 OP 想要的。 val = val[:-1] + "d" 应该可以工作
【解决方案2】:

正如错误所说,字符串不能被修改,因为它们是不可变的(例如参见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,否则它会将你字符串中的每个t更改为d(即使是字符串开头的那些)

【讨论】:

    最近更新 更多