79 votes

La façon la plus simple de remplacer une chaîne à l'aide d'un dictionnaire de remplacements ?

Considérez..

dict = {
'':'',
'russianA':'englishA'
}

s = ' russianA'

J'aimerais remplacer toutes les clés dict par leurs valeurs dict respectives en s.

103voto

Max Shawabkeh Points 19030

Utilisation de 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'

Cela ne correspondra qu'à des mots entiers. Si vous n'en avez pas besoin, utilisez le modèle :

pattern = re.compile('|'.join(d.keys()))

Notez que dans ce cas, vous devez trier les mots en descendant par longueur si certaines de vos entrées de dictionnaire sont des sous-chaînes d'autres.

25voto

codeape Points 38576

Vous pouvez utiliser la fonction de

reduce(lambda x, y: x.replace(y, dict[y]), dict, s)

20voto

ChristopheD Points 38217

Solution trouvée ici (j'aime sa simplicité) :

def multipleReplace(text, wordDict):
    for key in wordDict:
        text = text.replace(key, wordDict[key])
    return text

5voto

ghostdog74 Points 86060

aller simple, sans re

d = {
'Спорт':'Досуг',
'russianA':'englishA'
}

s = 'Спорт russianA'.split()
for n,i in enumerate(s):
    if i in d:
        s[n]=d[i]
print ' '.join(s)

3voto

extraneon Points 13362

Presque le même que ghostdog74, bien que créé indépendamment. Une différence, en utilisant d.get() à la place de d[] peut gérer des éléments qui ne sont pas dans la dictée.

>>> d = {'a':'b', 'c':'d'}
>>> s = "a c x"
>>> foo = s.split()
>>> ret = []
>>> for item in foo:
...   ret.append(d.get(item,item)) # Try to get from dict, otherwise keep value
... 
>>> " ".join(ret)
'b d x'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X