2017-03-03 2 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 맞습니다. ? 이제

, 나는이 데이터가 방법이있다 : 나는 여부를 확인하기 위해 execute fuction를 변경 싶지 않아,

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

execute를 호출하고 결과를 참고를 얻기 위해 내가 목록을 작성한 다음 루프를 추가하십시오. 사전 내부의 중첩 된리스트로의

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)를 사용하면 목록을 얻을 수 있습니다. 그러면 목록을 반복하여 각 값을 class + execute 함수. –

+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

생각한다

난 그냥, DICT를 통해 같은 것을 반복합니다. 그래서 당신은 할 수 있습니다 values['c'][0] 1로 평가되며, values['c'][1] 2.

로 평가됩니다

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