Поскольку у меня есть некоторые правила, сохраненные в mysql db.
+----+---------+-------+----------+-------+-------+
| id | rule_id | field | operator | value | order |
+----+---------+-------+----------+-------+-------+
| 1 | 1 | 5 | 2 | 8 | 1 |
| 2 | 1 | 10 | 2 | 2 | 2 |
| 3 | 1 | 4 | 2 | 1 | 3 |
...
# operator 2 is equal to GREATER_THAN for example
Затем я хочу отфильтровать список данных, используя соответствующий оператор правила, как показано в коде ниже
operator = "LESS_THAN" # get from mysql db
target_value = 8
list1 = [{'clicks':5, "views":7, 'id':1234}, {'clicks':5, "views":9, 'id':1235}]
filtered_list = [i['id'] for i in filter(lambda item: item['views'] > target_value, list1)]
# filter the list according to operator > ,target_value 8 for example.
Можно ли использовать отношения карты, такие как
operation_map = {
"LESS_THAN" : <,
"GREATER_THAN": >,
"EQUAL":=
}
сделать что-то вроде ниже взломанного вместо if operator == 'GREATER_THAN' : pass
синтаксиса?
filtered_list = [i['id'] for i in filter(lambda item: item['views'] operation_map[operator] target_value, list1)]
Любая помощь или понимание будет высоко ценится, большое спасибо.