2017-02-07 4 views
1

を実行します。のは、私は、文字列変数として、この操作を持っているとしましょう辞書から変数の値を使用して文字列として書かれた数式(パイソン)

formula = '{a} + {b}' 

そして、私は、このような

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

などの辞書を持っています一部のライブラリにこのような機能がありますか?

evaluate(operation = formula, variables = data) 

以下のようになります。

7 

答えて

1

eval()を使用することもできますが、チェックアウト:

>>> data = {'a': 3, 'b': 4} 
>>> eval('{a} + {b}'.format(**data)) 
>>> 7 

eval()与えられた文字列をPythonコードとして実行しようとします。 python formatの詳細については、本当に素敵なpyformatサイトをご覧ください。

+0

は、この洞察力のためにありがとうございました。それはまた私がnumexprを見つけるのを助けた。私は彼らともう少し遊ぶ必要があります – Delosari

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 
+0

返事ありがとうございます...これは1つのタイプの方程式を解く必要があるときにもっと効率的でなければなりません:) – Delosari

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-文字列クールでこれを行うことができます。

>>> f"{sum(data.values())}" 
'7' 
+1

'formula.format(** data)'代わりに。 –

+0

@StevenSummers \tありがとうございます。 – MYGz

+0

更新ありがとうございます – Delosari

関連する問題