У меня есть логическое выражение вроде:
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
Пожалуйста, поделитесь эффективным решением для достижения этой цели. Приложение может определять различные выражения, и одно выражение используется для оценки тысяч словарей, таких как x.