python - 从字典中使用replace()时出现类型错误

标签 python string dictionary int typeerror

首先:请记住,我在编程方面还是个初学者。

我正在尝试用Python编写一个简单的程序,它将用辅音+“o”+辅音替换字符串中的辅音。例如,“b”将替换为“bob”,“d”将替换为“dod”(因此单词“python”将更改为“popytothohonon”)。

为此,我创建了一个字典,其中包含 b:bob、c:coc、d:dod 等对。然后我使用 Replace() 命令读取该单词,并将辅音替换为它们在字典。完整的代码如下所示:

def replacer(text):
    consonant='bcdfghjklmnpqrstvwxz'
    lexicon={}
    for x in range(0,len(consonant)):
        lexicon[x]=(consonant[x]),(consonant[x]+'o'+consonant[x])
    for i,j in lexicon.items():
        text=(text.replace(i,j))
    return text

现在,当我尝试调用此函数时,出现以下错误:

Traceback (most recent call last):
  File "D:\x\x.py", line 37, in <module> 
      print(replacer("python"))
  File "D:\x\x.py", line 17, in replacer 
      text=(text.replace(i,j))
TypeError: Can't convert 'int' object to str implicitly

但我没有使用任何整数!字典一定有问题,因为当我像这样“手工”制作它时一切正常:

list={'b':'bob', 'c':'coc', 'd':'dod', 'f':'fof', 'g':'gog', 'h':'hoh'......}

但是当我打印“非手工制作”词典时,一切似乎都井然有序:

{0: ('b', 'bob'), 1: ('c', 'coc'), 2: ('d', 'dod'), 3: ('f', 'fof')........

我做错了什么?

最佳答案

lexicon 是一个以整数作为键、以元组作为值的字典。当您迭代它的项目时,您将获得 (integer,tuple) 形式的元组。然后,您将该整数和元组作为 ij 传递给 text.replace,这就是它提示的原因。也许您的意思是:

 for i,j in lexicon.values():
     ...

对于这个简单的替换,str.replace 就可以了,但是对于更复杂的替换,如果您use re.sub instead,代码可能会更健壮(并且可能执行得更快!) .

<小时/>

此外,正如评论中指出的,对于这种情况,更好的数据结构是使用列表:

lexicon = [ (x,'{0}o{0}'.format(x)) for x in chars ]

现在,如果您确实愿意,您可以从此列表中构建您的字典:

lexicon = dict(enumerate(lexicon))

但可能没有必要。在这种情况下,您可以直接迭代 lexicon:

for i,j in lexicon:
    ...

如果您只想执行此操作一次,您甚至可以懒惰地执行此操作,而无需使用生成器表达式具体化列表:

lexicon = ( (x,'{0}o{0}'.format(x)) for x in chars )

关于python - 从字典中使用replace()时出现类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15976639/

相关文章:

string - 需要将String ^转换为char *

javascript - 字符串到数组或元素的数组

javascript - 如何在nodeJS中向mysql添加map对象?

python - 如何启动 python shell 并使用一些命令自动初始化它?

python - SQLAlchemy 错误 MySQL 服务器已经消失

python - 搜索特定字符串的目录

string - 检查字符串是否只是字母(没有符号和数字)lisp

python - 使用 operator.itemgetter 对字典进行排序

Python 列表中的 append 元素随着其原始变量的变化而变化

python - 我的抓取工具产生了太多的项目,而不是将它们全部合并成一小堆