Overweeg..
dict = {
'':'',
'russianA':'englishA'
}
s = ' russianA'
Ik wil graag alle dict-sleutels vervangen door hun respectievelijke dict-waarden in s
.
Antwoord 1, autoriteit 100%
Re:
. gebruiken
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'
Dit komt alleen overeen met hele woorden. Als je dat niet nodig hebt, gebruik dan het patroon:
pattern = re.compile('|'.join(d.keys()))
Houd er rekening mee dat u in dit geval de woorden aflopend op lengte moet sorteren als sommige van uw woordenboekitems subtekenreeksen van andere zijn.
Antwoord 2, autoriteit 25%
Je zou de functie verminderenkunnen gebruiken:
reduce(lambda x, y: x.replace(y, dict[y]), dict, s)
Antwoord 3, autoriteit 19%
Oplossing hier gevonden(ik hou van de eenvoud):
def multipleReplace(text, wordDict):
for key in wordDict:
text = text.replace(key, wordDict[key])
return text
Antwoord 4, autoriteit 5%
enkele reis, zonder re
d = {
'':'',
'russianA':'englishA'
}
s = ' russianA'.split()
for n,i in enumerate(s):
if i in d:
s[n]=d[i]
print ' '.join(s)
Antwoord 5, autoriteit 3%
Bijna hetzelfde als ghostdog74, maar onafhankelijk gemaakt. een verschil,
het gebruik van d.get() in plaats van d[] kan items aan die niet in het dictaat staan.
>>> 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'
Antwoord 6
Ik gebruikte dit in een vergelijkbare situatie (mijn string was helemaal in hoofdletters):
def translate(string, wdict):
for key in wdict:
string = string.replace(key, wdict[key].lower())
return string.upper()
hoop dat dat op de een of andere manier helpt… 🙂
Antwoord 7
Met de waarschuwing dat het mislukt als de sleutel ruimte heeft, is dit een gecomprimeerde oplossing vergelijkbaar met ghostdog74 en extaneons antwoorden:
d = {
'':'',
'russianA':'englishA'
}
s = ' russianA'
' '.join(d.get(i,i) for i in s.split())