2013-07-22 3 views
1

Учитывая словарь замен, где key = to be replaced и value = replacements и т.д .:Как использовать str.replace() со словарем замены? Python

replacements = {u'\u2014':'-', u'\u2019':"'", u'\u2018':"'", u'\u201d':'"', u'\u201c':'"'} 

Как я выполнить замену без перебора replacements.keys()?

Как будет выполняться такая же операция с регулярным выражением, re.sub()?

Я делал это так:

for r in replacements: 
    sentence = sentence.replace(r,replacements[r]) 

ответ

5

Вы ищете unicode.translate() вместо этого. Он принимает отображение Юникода порядковых (целые числа) и значения должны быть числительные тоже, или юникод строки или None сигнализировать удалить этот символ:

replacements = {ord(k): ord(v) for k, v in replacements.iteritems()} 
sentence = sentence.translate(replacements) 

Демо:

>>> replacements = {ord(k): ord(v) for k, v in replacements.iteritems()} 
>>> replacements 
{8216: 39, 8217: 39, 8212: 45, 8221: 34, 8220: 34} 
>>> u'\u2019Hello world! \u2014 You rock!\u2018'.translate(replacements) 
u"'Hello world! - You rock!'" 
Смежные вопросы