首先:请记住,我在编程方面还是个初学者。
我正在尝试用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)
形式的元组。然后,您将该整数和元组作为 i
和 j
传递给 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/