使用字典中的变量值(python)执行写为字符串的数学表达式

时间:2017-02-07 11:21:50

标签: python dictionary

让我说我将此操作作为字符串变量:

formula = '{a} + {b}'

我有一本字典,如

data = {'a': 3, 'b': 4}

某些库中是否有这样的功能:

evaluate(operation = formula, variables = data)

给出:

7

3 个答案:

答案 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