2017-03-03 19 views
0

値としてリストを持つとき:反復辞書私はこのコードを持っている

import numpy as np 
from sympy import sympify 

class myclass(): 

    def __init__(self, expression ='', values = {}): 
     self.expression = expression 
     self.values = values 


    def execute(self): 

     expr = sympify(self.expression) 

     for v in self.values: 
      expr = expr.subs(str(v),self.values[v]) 

     self.result = expr.evalf() 

     return self.result 

入力と辞書を持ったときに式を実行します。このデータでは

values = {'c':1, 'd':2} 
print(myclass('c + d',values).execute()) 

私が受けています:3正しいです。

さて、私はこのデータを持っている方法がある:

values = {'c':[1,2], 'd':[3,4]} 

executeを呼び出し、結果を得るために注意、私は私かどうかを確認するために、executeのfuctionを変更したくないということ?リストを持ってループを追加してください。私は辞書を反復処理したい

、のようなもの:

for k, v in thevalues.items(): 
    for i in v: 
     print(myclass('c + d',.......).execute()) 
+0

Iでおそらく '[{'c':1、 'd':3}、{'c':2、 'd':4}]'のようなディクテーションのリストにしたいと思っていますか? vのzip(* values.values())) 'の' map(dict、(zip(values.keys()、v)は ')'あなたにリストを与え、クラス+実行関数。 –

+0

@PaulRooney:ありがとうございました、アイデアは、これも動作します。 – George

答えて

0

一つの解決策は次のようになります。

# assuming the length of the list for 'c' and 'd' is the same. calaculate the length of the list for 'c' or 'd' 

for k, v in values.items(): 
    length_of_values_list = len(v) 
    break 

for i in range(length_of_values_list): 
     print [myclass('c+d', dict([(k,v[i]) for k, v in values.items()])).execute()] 

結果

[4.000] 
[6.000] 
0

は、辞書内のネストされたリストと考えてください。だから、あなたが持つことができるvalues['c'][0]は1と評価され、values['c'][1]は2

と評価されます:

for k, v in thevalues.items(): 
    for i in thevalues[k]: 
     print(myclass('c + d',.......).execute()) 
関連する問題