Utilizzando Re:
import re
s = 'Спорт not russianA'
d = {
'Спорт':'Досуг',
'russianA':'englishA'
}
pattern = re.compile(r'\b(' + '|'.join(d.keys()) + r')\b')
result = pattern.sub(lambda x: d[x.group()], s)
# Output: 'Досуг not englishA'
Questo selezionerà solo parole intere. Se non avete bisogno di questo, utilizzare il modello:
pattern = re.compile('|'.join(d.keys()))
Si noti che in questo caso si dovrebbe ordinare le parole che discendono dalla lunghezza, se alcune delle vostre voci del dizionario sono stringhe degli altri.
fonte
2010-03-08 10:20:39
Questo potrebbe non essere così semplice. Probabilmente dovresti avere un tokenizer esplicito (ad esempio '{'cat': 'russiancat'}' e 'caterpillar'). Anche parole sovrapposte ('{'car': 'russiancar', 'pet': 'russianpet'} 'e' carpet '). – Joe
Vedere anche http://code.activestate.com/recipes/81330-single-pass-multiple-replace/ – ChristopheD
Per inciso: penso che "dict" sia meglio evitare come nome di variabile, perché una variabile di questo nome sarebbe ombreggia la funzione integrata con lo stesso nome. – jochen