Python 使用字典中的replace()时出现TypeError
首先:请记住,我是一个编程新手 我正试图用Python编写一个简单的程序,将字符串中的辅音替换为辅音+“o”+辅音。例如,“b”将替换为“bob”,而“d”将替换为“dod”(因此“python”一词将改为“popythohonon”) 为此,我创建了一个字典,其中包含b:bob、c:coc、d:dod等对。然后我使用replace()命令通读单词,并在字典中用辅音的翻译替换辅音。完整的代码如下所示:Python 使用字典中的replace()时出现TypeError,python,string,dictionary,int,typeerror,Python,String,Dictionary,Int,Typeerror,首先:请记住,我是一个编程新手 我正试图用Python编写一个简单的程序,将字符串中的辅音替换为辅音+“o”+辅音。例如,“b”将替换为“bob”,而“d”将替换为“dod”(因此“python”一词将改为“popythohonon”) 为此,我创建了一个字典,其中包含b:bob、c:coc、d:dod等对。然后我使用replace()命令通读单词,并在字典中用辅音的翻译替换辅音。完整的代码如下所示: def replacer(text): consonant='bcdfghjklmnp
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
list={'b':'bob', 'c':'coc', 'd':'dod', 'f':'fof', 'g':'gog', 'h':'hoh'......}
for x in consonant:
lexicon[x] = x+"o"+x
现在,当我尝试调用此函数时,出现以下错误:
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
但当我打印“非手工制作”词典时,一切似乎都井然有序:
{0: ('b', 'bob'), 1: ('c', 'coc'), 2: ('d', 'dod'), 3: ('f', 'fof')........
我做错了什么
词典
是一个以整数为键、元组为值的词典。当您迭代它的项时,您将得到(integer,tuple)
形式的元组。然后将该整数和元组传递给文本。将替换为i
和j
,这就是它抱怨的原因。也许你的意思是:
for i,j in lexicon.values():
...
对于这个简单的替换,str.replace
很好,但是对于更复杂的替换,如果您愿意,代码可能会更健壮(并且可能执行得更快!)
此外,正如评论中指出的,对于这种情况,更好的数据结构是使用列表
:
lexicon = [ (x,'{0}o{0}'.format(x)) for x in chars ]
现在,如果您确实需要,您可以根据此列表构建dict:
lexicon = dict(enumerate(lexicon))
但可能没有必要。在这种情况下,您可以直接迭代词典
:
for i,j in lexicon:
...
如果只执行一次,甚至可以使用生成器表达式懒洋洋地执行此操作,而不会具体化列表:
lexicon = ( (x,'{0}o{0}'.format(x)) for x in chars )
不。。。手工版本中的键是字符串。。。另一个版本中的KET是ints。。。int没有替换方法这次不需要字典,只需迭代文本中的字符,将vovels或consonant+o+consonant添加到结果数组中,并将其连接到末尾的字符串:
def replacer(text):
consonants = set('bcdfghjklmnpqrstvwxz')
result = []
for c in text:
if c in consonants:
result.append(c+"o"+c)
else:
result.append(c)
return "".join(result)
print(replacer("python"))
对于高级用户:
def replacer(text):
return re.sub(r"[bcdfghjklmnpqrstvwxz]", r"\g<0>o\g<0>", text)
我想你们想要实现的是将辅音映射到替换词。可以这样做:
lexicon = { c: c+'o'+c for c in consonant }
这相当于:
for c in consonant:
lexicon[c] = c+'o'+c
在这种情况下,您最好将辅音
aset
@mgilson设置为true。我只是不认为像set(在“bcdfghjklmnpnpqrstvwxz”中c代表c)这样的生成器表达式是“非常初级”的set(在“bcdfghjklmnpqrstvwxz”中c代表c)
?为什么不set('bcd..)
,这似乎很容易理解?@DSM哦,对了,我忘了也可以从字符串创建集合,谢谢。是的,我把键和值弄混了。