を実行します。のは、私は、文字列変数として、この操作を持っているとしましょう辞書から変数の値を使用して文字列として書かれた数式(パイソン)
formula = '{a} + {b}'
そして、私は、このような
data = {'a': 3, 'b': 4}
などの辞書を持っています一部のライブラリにこのような機能がありますか?
evaluate(operation = formula, variables = data)
以下のようになります。
7
を実行します。のは、私は、文字列変数として、この操作を持っているとしましょう辞書から変数の値を使用して文字列として書かれた数式(パイソン)
formula = '{a} + {b}'
そして、私は、このような
data = {'a': 3, 'b': 4}
などの辞書を持っています一部のライブラリにこのような機能がありますか?
evaluate(operation = formula, variables = data)
以下のようになります。
7
eval()
を使用することもできますが、チェックアウト:
>>> data = {'a': 3, 'b': 4}
>>> eval('{a} + {b}'.format(**data))
>>> 7
eval()
与えられた文字列をPythonコードとして実行しようとします。 python format
の詳細については、本当に素敵なpyformatサイトをご覧ください。
まずあなたは、あなたはあなたがこの目的のために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
返事ありがとうございます...これは1つのタイプの方程式を解く必要があるときにもっと効率的でなければなりません:) – Delosari
の場合あなたは、フォーマット文字列にこのような何かを行うことができますの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-文字列クールでこれを行うことができます。
>>> f"{sum(data.values())}"
'7'
は、この洞察力のためにありがとうございました。それはまた私がnumexprを見つけるのを助けた。私は彼らともう少し遊ぶ必要があります – Delosari