【发布时间】:2019-03-07 17:36:32
【问题描述】:
有没有办法简化这堆 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"}
【问题讨论】:
-
switch 语句是否适用于您的用例? jaxenter.com/implement-switch-case-statement-python-138315.html
-
这种模式“if not something: if not word in someDict: something = someDict[word]”可以变成一个函数。
-
从性能方面来说,如果你只想被执行然后使用
elif而不是if系列
标签: python if-statement simplify simplification