Я бы предложил просто использовать метод dict.get
.Этот метод имеет необязательный аргумент default
.Передав этот аргумент, вы можете избежать KeyError
.Если ключ отсутствует в словаре, будет возвращено значение по умолчанию.
Если вы по умолчанию используете ранее назначенную переменную, она не будет заменена произвольным значением, а будет правильным значением.Например, если текущее слово является «предикатом», «прямой объект» будет заменен значением, уже сохраненным в переменной.
CODE
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:
predicate = predicateDict.get(word, predicate)
directObjectAdjective = adjectiveDict.get(word, directObjectAdjective)
directObject = objectDict.get(word, directObject)
preposition = prepositionDict.get(word, preposition)
indirectObjectAdjective = adjectiveDict.get(word, indirectObjectAdjective)
indirectObject = objectDict.get(word, indirectObject)
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]
PS: Используйте немного больше пробелов.Читатели будут вам благодарны ...
PPS: Я не проверял это, потому что у меня нет таких словарей под рукой.
PPPS: Это будетвсегда возвращайте last вхождений типов в тексте, в то время как ваша реализация всегда возвращает first вхождений.