我有这样一个逻辑表达式:
expression = '(1 & 2) & 3'
and a dictionary as, x = {1: '1', 2: '0', 3: '0'}
--- keys can be int or string, manageable
我需要把这根弦计算为
'(1 & 2) & 3'
=> '(x[1] & x[2]) & x[3]'
=> '(1 & 0) & 0'
=> eval('(1 & 0) & 0') = 0
我现在是这样做的:
re.sub('(\d+)', r'x[\1]', expression)
=> '(x[1] & x[2]) & x[3]'
but can't run eval on this
或者
re.sub('(\d+)', eval(r'x[\1]'), expression)
=> eval(x[\1]) --> logical error
请分享实现这一目标的有效解决方案。应用程序可以定义不同的表达式,其中一个表达式用于计算1000个字典(如x)
以防有用。不带正则表达式
您可以做的是定义一个
lambda
函数作为替换,并在字典中查找每个匹配项:如果表达式可能包含字典中不存在的整数,则可以调整如下内容:
相关问题 更多 >
编程相关推荐