developer tip

대체 사전을 사용하여 문자열을 대체하는 가장 쉬운 방법은 무엇입니까?

copycodes 2020. 11. 4. 08:08
반응형

대체 사전을 사용하여 문자열을 대체하는 가장 쉬운 방법은 무엇입니까?


중히 여기다..

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

s = 'Спорт russianA'

모든 dict 키를의 해당 dict 값으로 바꾸고 싶습니다 s.


다시 사용 :

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'

이것은 전체 단어와 만 일치합니다. 필요하지 않은 경우 다음 패턴을 사용하십시오.

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

이 경우 사전 항목 중 일부가 다른 항목의 하위 문자열 인 경우 길이를 기준으로 내림차순으로 단어를 정렬해야합니다.


감소 기능을 사용할 있습니다.

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

여기에 해결책이 있습니다 (단순함이 마음에 듭니다).

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

재없이 편도

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

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

독립적으로 생성되었지만 ghostdog74와 거의 같습니다. 한 가지 차이점은 d [] 대신 d.get ()을 사용하면 dict에없는 항목을 처리 할 수 ​​있다는 것입니다.

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

비슷한 상황에서 이것을 사용했습니다 (내 문자열은 모두 대문자였습니다).

def translate(string, wdict):
    for key in wdict:
        string = string.replace(key, wdict[key].lower())
    return string.upper()

어떤 식 으로든 도움이되기를 바랍니다 ... :)


With the warning that it fails if key has space, this is a compressed solution similar to ghostdog74 and extaneons answers:

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

s = 'Спорт russianA'

' '.join(d.get(i,i) for i in s.split())

참고URL : https://stackoverflow.com/questions/2400504/easiest-way-to-replace-a-string-using-a-dictionary-of-replacements

반응형