Python 如何从字符串中删除字典中的对应单词?
我有一本字典和一本课文: {“爱”:1,“期待”:2,“烦恼”:-2} test=“我爱你,真烦人” 如果单词出现在词典中,我需要从字符串中删除它们。我尝试过以下代码:Python 如何从字符串中删除字典中的对应单词?,python,string,dictionary,Python,String,Dictionary,我有一本字典和一本课文: {“爱”:1,“期待”:2,“烦恼”:-2} test=“我爱你,真烦人” 如果单词出现在词典中,我需要从字符串中删除它们。我尝试过以下代码: for k in dict: if k in test: test=test.replace(k, "") 然而,结果是: 我相信你,那是一种侮辱 这不是我想要的,因为它不应该删除“烦扰”作为单词的一部分,整个单词应该被评估。我如何实现它?您可以使用以下方法: query = "i love you,
for k in dict:
if k in test:
test=test.replace(k, "")
然而,结果是:
我相信你,那是一种侮辱
这不是我想要的,因为它不应该删除“烦扰”作为单词的一部分,整个单词应该被评估。我如何实现它?您可以使用以下方法:
query = "i love you, that is annoying"
query = query.replace('.', '').replace(',', '')
my_dict = {"love": 1, "expect": 2, "annoy": -2}
querywords = query.split()
resultwords = [word for word in querywords if word.lower() not in my_dict]
result = ' '.join(resultwords)
print(result)
>> 'i you, that is annoying'
如果要排除所有不区分关键字的单词,请将my_dict
中的所有关键字转换为小写:
my_dict = {k.lower(): v for k, v in my_dict.items()}
首先,您不应该将名称分配给也是类中内置的名称的变量,例如
dict
变量test
是由字符组成的字符串。当您说,if k in test:
时,您将测试k
,以查看它是否是test
的子字符串。您要做的是将测试
分解成一个单词列表,并将k
与该列表中的每个完整单词进行比较。如果单词被一个空格分隔,那么它们可能会被“拆分”为:
测试
拆分(“”)
唯一复杂的是,它将创建以下列表:
['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
>>>
现在你可能会发现你的句子中有多余的空格,但你可以想出如何去掉这些空格。这是否回答了你的问题?是否有一种方法可以一次排除所有标点符号,而不是使用多个
.replace()
?@JonasPalačionis是,使用导入字符串;test.translate(str.maketrans(“”,,,string.标点))
如果我们有一个不知道具体细节的长字符串,那么使用它会更有意义。谢谢你去掉了标点符号,却再也没有把它放回去。所以我看不出最终显示的打印字符串是如何结束的。这里有点不对劲。是的,错过了那个,谢谢。在您的示例中,哪个代码部分将标点符号放回原处?我从不从原始字符串中取出标点符号。我是在原始字符串上执行replace
,而不是在删除和拆分标点后从原始字符串形成的单词列表上。