Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从字符串中删除字典中的对应单词?_Python_String_Dictionary - Fatal编程技术网

Python 如何从字符串中删除字典中的对应单词?

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,

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

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

test=“我爱你,真烦人”

如果单词出现在词典中,我需要从字符串中删除它们。我尝试过以下代码:

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
,而不是在删除和拆分标点后从原始字符串形成的单词列表上。