使用字典替换文本中的单词

时间:2015-03-12 03:53:28

标签: python

我正在尝试创建一个替换字符串中的单词的程序。

ColorPairs = {'red':'blue','blue':'red'}

def ColorSwap(text):
    for key in ColorPairs:
        text = text.replace(key, ColorPairs[key])
    print text

ColorSwap('The red and blue ball')
# 'The blue and blue ball'
instead of
# 'The blue and red ball'

这个程序将'red'替换为'blue',但不将'blue'替换为'red'。我试图找出一种方法来制作它,以便程序不会覆盖第一个被替换的键。

3 个答案:

答案 0 :(得分:5)

您可以使用re.sub功能。

import re
ColorPairs = {'red':'blue','blue':'red'}
def ColorSwap(text):
    print(re.sub(r'\S+', lambda m: ColorPairs.get(m.group(), m.group()) , text))

ColorSwap('The blue red ball')

\S+匹配一个或多个非空格字符。您也可以使用\w+代替\S+。对于每个单独的匹配,python将检查与字典键的匹配。如果有匹配的密钥,那么它将用该特定密钥的值替换字符串中的密钥。

如果找不到密钥,如果您使用KeyError,则会显示ColorPairs[m.group()]。所以我使用dict.get()方法,如果没有找到密钥,则返回默认值。

<强>输出:

The red blue ball

答案 1 :(得分:0)

由于字典是无序的,因此在第一次迭代中可能需要blue转换为red,而在第二次迭代中,它会再次从red更改为blue。因此,为了获得结果,您需要以这种方式进行编码。这当然不是最好的解决方案,而是另一种方式。

import re
def ColorSwap(text):
    text = re.sub('\sred\s',' blue_temp ', text)
    text = re.sub('\sblue\s', ' red_temp ', text)
    text = re.sub('_temp','', text)
    return text

print ColorSwap('The red and blue ball')

答案 2 :(得分:0)

如果您不想按照@Avinash的建议使用正则表达式,则可以将text拆分为单词,替换然后加入。

ColorPairs = {'red':'blue','blue':'red'}
def ColorSwap(text):
    textList = text.split(' ')
    text = ' '.join(ColorPairs.get(k, k) for k in textList)
    print text

ColorSwap('The red and blue ball')

输出

The blue and red ball