【发布时间】:2016-05-08 02:28:15
【问题描述】:
我想根据字典替换一个很长的字符串。我的代码是这样的:
def rep(self, mystr, dict):
new_pstr = ''
for char in mystr:
try:
new_pstr += dict[char]
except:
continue
return new_pstr
这段代码没有我预期的那么快。也许没有循环,它会更快。但我不知道该怎么做。最后但同样重要的是,我不能一起替换所有相同的字符,每次我应该只替换一个字符。因此,替换功能可能不是我的选择。为了更清楚,我举个例子:
如果d = {'A':'C', 'C':'B'} 和mystr = 'AC',那么new_pstr = 'CB'
(如果你的方式返回我'BB',这不是我所期望的)
实际上,我的字典是这样的:
d = {u'q': [u'k'], u'v': [u'v'], u'e': [u'e'], u'\xe7': [u'\xe7'], u'\xe9': [u'e'], u'h': [u'y'], u'j': [u'z'], u'o': [u'u'], u'\xf1': [u'g'], u'i': [u'i'], u'\u015f': [u's'], u'\xf6': [u'u'], u'x': [u'x'], u'\xfc': [u'v'], u'\u011f': [u'g']}
我的字符串是这样的:
str = "tériniñ yiriklişip kétişi havadiki nemlikniñ tövenlep ketkenlikidin bolup ، bu vaqitta tére téximu qurğaqlişip kétidu ، tériniñ ilastikiliqi acizlap ، xünük bolup qalidu. şuña xanim – qizlar bundaq vaqitta tére qurğaqlişişniñ aldini alidiğan çare– tedbirlerni qolliniş kérek. nemlikni saqlaşta yuquri dericilik su toluqlaş yüzlüki، hesel ve örük méğizi méyiğa muvapiq miqdarda un arilaşturup melhem qilip yüzge çaplap bers e، yaki nemxuşluqi yuquri bolğan tére nemleştürüş vazilin méyi sürüp berse، qurğaq térige su toluqlaşqa paydiliq."
我使用 try.. except ... 的原因是因为我的代码有时会返回类似 UnicodeEncodeError: 'ascii' codec can't encode character u'\xe7' in position 2: ordinal not in range(128)
【问题讨论】:
-
有什么理由不使用
string.translate()? -
使用数组追加和连接,而不是python中的字符串连接。
-
与问题无关,但不要使用
dict或其他内置类型作为变量名,mydict会更符合mystr -
您为什么需要删除字典中不存在的字符? (这就是
except: continue正在做的事情) -
@neoyghur,你真的有多个字符作为值吗?
标签: python string performance replace