让我说我将此操作作为字符串变量:
formula = '{a} + {b}'
我有一本字典,如
data = {'a': 3, 'b': 4}
某些库中是否有这样的功能:
evaluate(operation = formula, variables = data)
给出:
7
答案 0 :(得分:4)
如果您使用的是Python3,您可以使用字符串格式执行此类操作:
>>> import ast
>>> data = {'a': 3, 'b': 4}
>>> formula = '{a} + {b}'
>>> res_string = formula.format(a=data['a'], b=data['b'])
>>> res = ast.literal_eval(res_string)
>>> print(res)
7
或者更好,正如史蒂文在评论中指出的那样:
res_string = formula.format(**data)
或者如果你使用的是Python3.6,你甚至可以使用酷的f-string来实现这个目的:
>>> f"{sum(data.values())}"
'7'
答案 1 :(得分:1)
虽然没有推荐,但您可以使用eval()
。退房:
>>> data = {'a': 3, 'b': 4}
>>> eval('{a} + {b}'.format(**data))
>>> 7
eval()
将尝试以python代码执行给定的字符串。
有关python format
的更多信息,您可以查看非常好的pyformat网站。
答案 2 :(得分:1)
首先你需要解析你的字符串,然后你需要有一个合适的字典,以便将已建立的运算符映射到它们的等效函数,你可以使用operator
模块来达到这个目的:
In [54]: from operator import add
In [55]: operators = {'+': add} # this is an example, if you are dealing with more operations you need to add them to this dictionary
In [56]: def evaluate(formula, data):
a, op, b = re.match(r'{(\w)} (\W) {(\w)}', formula).groups()
op = operators[op]
a, b = data[a], data[b]
return op(a, b)
....:
In [57]: evaluate(formula, data)
Out[57]: 7