首页 > 解决方案 > 如何从字符串中删除字典中的相应单词?

问题描述

我有一本字典和一段文字:

{“爱”:1,“期望”:2,“烦恼”:-2}

test="我爱你,这很烦人"

如果它们出现在字典中,我需要从字符串中删除它们。我试过这段代码:

for k in dict:
    if k in test:
        test=test.replace(k, "")

然而结果是:

我是你,那是 ing

这不是我要找的,因为它不应该删除“烦”作为单词的一部分,应该评估整个单词。我怎样才能实现它?

标签: pythonstringdictionary

解决方案


首先,您不应将名称分配给也是类内置名称的变量,例如dict.

变量test是由字符组成的字符串。当您说 时if k in test:,您将测试k它是否是 的子字符串test。您要做的是分解test成一个单词列表,并与该列表中的k每个完整单词进行比较。如果单词被一个空格分隔,那么它们可能会被“拆分”为:

test。分裂(' ')

唯一的复杂之处在于它将创建以下列表:

['i', '', 'you,', 'that', 'is', 'annoying']

请注意,第三项仍然有一个,。所以我们应该首先去掉我们可能期望在我们的句子中找到的标点符号:

test.replace('.', '').replace(',', ' ').split(' ')

产量:

['i', '', 'you', '', 'that', 'is', 'annoying']

以下实际上将摆脱所有标点符号:

import string
test.translate(str.maketrans('', '', string.punctuation))

所以现在我们的代码变成了:

>>> import string
>>> d = {"love":1, "expect":2, "annoy":-2}
>>> test="i love you, that is annoying"
>>> for k in d:
...     if k in test.translate(str.maketrans('', '', string.punctuation)).split(' '):
...         test=test.replace(k, "")
...
>>> print(test)
i  you, that is annoying
>>>

您现在可能会发现句子中有多余的空格,但您可以弄清楚如何摆脱这些空格。


推荐阅读