python - 简化许多 if 语句
问题描述
有没有办法简化这堆 if 语句?这个解析函数确实有效(使用正确的字典),但它必须为输入中的每个单词测试 6 个 if 语句。对于一个 5 个单词的句子,这将是 30 个 if 语句。它也有点难以阅读。
def parse(text):
predicate=False
directObjectAdjective=False
directObject=False
preposition=False
indirectObjectAdjective=False
indirectObject=False
text=text.casefold()
text=text.split()
for word in text:
if not predicate:
if word in predicateDict:
predicate=predicateDict[word]
continue
if not directObjectAdjective:
if word in adjectiveDict:
directObjectAdjective=adjectiveDict[word]
continue
if not directObject:
if word in objectDict:
directObject=objectDict[word]
continue
if not preposition:
if word in prepositionDict:
preposition=prepositionDict[word]
continue
if not indirectObjectAdjective:
if word in adjectiveDict:
indirectObjectAdjective=adjectiveDict[word]
continue
if not indirectObject:
if word in objectDict:
indirectObject=objectDict[word]
continue
if not directObject and directObjectAdjective:
directObject=directObjectAdjective
directObjectAdjective=False
if not indirectObject and indirectObjectAdjective:
indirectObject=indirectObjectAdjective
indirectObjectAdjective=False
return [predicate,directObjectAdjective,directObject,preposition,indirectObjectAdjective,indirectObject]
如果需要,这里还有一个字典样本。
predicateDict={
"grab":"take",
"pick":"take",
"collect":"take",
"acquire":"take",
"snag":"take",
"gather":"take",
"attain":"take",
"capture":"take",
"take":"take"}
解决方案
这更像是一个代码审查问题,而不是堆栈溢出问题。一个主要问题是您将类似的数据保存在单独的变量中。如果你组合你的变量,那么你可以迭代它们。
missing_parts_of_speech = ["predicate", [...]]
dict_look_up = {"predicate":predicateDict,
[...]
}
found_parts_of_speech = {}
for word in text:
for part in missing_parts_of_speech:
if word in dict_look_up[part]:
found_parts_of_speech[part] = dict_look_up[part][word]
missing_parts_of_speech.remove(part)
continue
推荐阅读
- symfony - Symfony Tactician-bundle Typehints = 缺少处理程序方法错误
- java - Java:如何为 Windows 和 MAC 设置 java 路径
- python - 按特定字母拆分字符串,同时将它们保留在字符串中
- windows - 从powershell递归归档某种类型的所有文件
- gradle - Gradle 4.4 -> 4.10:不再显示正在下载的依赖项
- c# - 转换树中的表
- javascript - 在 Reactjs 中映射数组对象
- angularjs - 从命令提示符安装 Mongodb(错误:此版本的 mongod 不提供 WirdTiger)
- jquery - Jquery .post 和 .append 如何将一些信息放入不同的 div 中
- php - 运行php应用程序时访问被拒绝错误