考虑..
dict = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
我想用中的所有字典键替换它们各自的字典值s
。
考虑..
dict = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'
我想用中的所有字典键替换它们各自的字典值s
。
dict
顺便说一句:我认为最好避免使用变量名,因为此名称的变量会遮盖相同名称的内置函数。
Answers:
使用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'
这只会匹配整个单词。如果不需要,请使用以下模式:
pattern = re.compile('|'.join(d.keys()))
请注意,在这种情况下,如果某些词典条目是其他条目的子字符串,则应按长度降序对单词进行排序。
.join(d.keys())
可以用代替.join(re.escape(key) for key in d.keys())
。
https://regex101.com/r/bliVUS/1
--我需要\b
在结尾处删除,但不确定它是否正确。
您可以使用reduce函数:
reduce(lambda x, y: x.replace(y, dict[y]), dict, s)
reduce
应用替换。结果,使用字典交换单词{ 'red': 'green', 'green': 'red'}
不适用于reduce
基于-的方法,并且重叠的匹配项以不可预测的方式转换。
.replace()
通话可能会带来意想不到的后果:-html.replace('"', '"').replace('&', '&')
尝试一下html = '"foo"'
。
一种方法,无需重新
d = {
'Спорт':'Досуг',
'russianA':'englishA'
}
s = 'Спорт russianA'.split()
for n,i in enumerate(s):
if i in d:
s[n]=d[i]
print ' '.join(s)
我在类似的情况下使用了此字符串(我的字符串全部为大写):
def translate(string, wdict):
for key in wdict:
string = string.replace(key, wdict[key].lower())
return string.upper()
希望以某种方式有所帮助... :)
{'cat': 'russiancat'}
和“ caterpillar”)。还会重叠单词({'car':'russiancar', 'pet' : 'russianpet'}
和“地毯”)。