python - 如何从字符串中删除字典中的相应单词?
问题描述
我有一本字典和一段文字:
{“爱”:1,“期望”:2,“烦恼”:-2}
test="我爱你,这很烦人"
如果它们出现在字典中,我需要从字符串中删除它们。我试过这段代码:
for k in dict:
if k in test:
test=test.replace(k, "")
然而结果是:
我是你,那是 ing
这不是我要找的,因为它不应该删除“烦”作为单词的一部分,应该评估整个单词。我怎样才能实现它?
解决方案
首先,您不应将名称分配给也是类内置名称的变量,例如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
>>>
您现在可能会发现句子中有多余的空格,但您可以弄清楚如何摆脱这些空格。
推荐阅读
- android - 将窗口 SystemUiVisibility 设置为 SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 时,全屏 DrawerLayouts 如何影响将片段添加到后台堆栈?
- spring - Spring 如何知道将返回对象转换为 JSON 而不是 XML 或任何其他格式?
- android - Android Maps,如何检查滚动长度
- swift - 从 CV2 单击返回时不要重新加载 VC1 - Swift
- excel - 将 Power BI Desktop 连接到 .odc 文件
- c# - 属性总是不可变的吗?
- ios - 将当前视图控制器添加到 navigationControllerStack
- typescript - 类型注释和类型推断有什么区别?
- julia - 如何使用 Julia 0.7 将包固定到某个版本?
- c# - WPF:数据绑定 TreeViewItem -> 当先前选择另一个具有长时间运行操作的节点时,不需要选择悬停节点