У меня есть эта функция:Python рекурсивной функции или цикл для преобразования строки в JSON логической объект
def req_splitter(req_string):
req = {}
if " AND " in req_string:
cond = "AND"
req_splitted = req_string.split(" AND ")
elif " OR " in req_string:
cond = "OR"
req_splitted = req_string.split(" OR ")
else:
cond = "AND"
req_splitted = [req_string]
if len(req_splitted) > 1:
for sub_req in req_splitted:
sub_req_splitted = req_splitter(sub_req)
req[cond] = list()#new_req
req[cond].append(sub_req_splitted)
else:
req[cond] = req_splitted
return req
Он предназначен для преобразования в JSON-логических условий струнных, как этот:
Barracks AND Tech Lab
Lair OR Hive
Hatchery OR Lair OR Hive
Cybernetics Core AND Gateway OR Warpgate
Forge AND Twilight Council AND Ground Armor 1
Spire OR Greater Spire AND Hive AND Flyer Flyer Carapace 2
Spire OR Greater Spire AND Lair OR Hive AND Flyer Attacks 1
Состояние json_logic выглядит следующим образом:
{
"and": [
{
"or": [
"Gateway",
"Warpgate"
]
},
"Cybernetics Core"
]
}
Как моя рекурсивная функция должна работать, чтобы помочь мне разделить string к объекту условия, как пример выше?
Чтобы помочь вам понять проблему:
json_logic является модулем, который проверяет состояние, как словарь вы видите выше, и возвращаете некоторый результат, в зависимости от того, что вы сравните его.
И как работает условие: key-value par - это один логический оператор. Ключ обозначает логическое состояние. И значения в списке - это операнды. Если значение само по себе не является списком, а является словарем, оно повторяется.
Вы можете сравнить его с «polish notation»
И последняя вещь - И заявление имеет более высокий приоритет, чем OR заявления и OR заявление всегда вместе.
Итак ... вы просите нас написать свой код для вас? Это не то, как работает этот сайт. – jwodder
hmm ... ok. Я добавлю свой код. Я не добавил свою функцию, потому что думал, что она выглядит уродливой. – Nylithius
Почему операнды оператора 'AND' от' Cybernetics Core AND Gateway OR Warpgate' отменяются в вашем ожидаемом выходе? Короткие замыкания API 'json_logic', поэтому вы получите результат * другого *, если будут истинны выражения' Gateway OR Warpgate' и 'Cybernetics Core'. Операнды к 'OR' не меняются. –