是否可以使用运算符映射来自动生成指定的运算符?

时间:2019-03-22 07:46:48

标签: python dictionary operators

因为我在mysql数据库中保存了一些规则。

WelcomePage := CreateCustomPage(wpSelectTasks, '', '');   

然后,我想使用相关的规则运算符过滤数据列表,如下所示的代码

+----+---------+-------+----------+-------+-------+
| 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

任何帮助或见识将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

使用operator module

import operator

operator_map = {'LESS_THAN': operator.lt,
                'GREATER_THAN': operator.gt,
                'EQUAL': operator.eq}

filtered_list = [i['id'] for i in  filter(lambda item: operator_map[operator](item['views'], target_value), list1)]

根据需要添加其他运算符。