2017-03-03 52 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機能的研究,以檢查是否我有一個列表,然後添加一個循環。

我只是想通過快譯通迭代,是這樣的:它

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

我想想也許你想把它變成一個類似於'[{'c':1,'d':3},{'c':2,'d':4}]'的字典列表?那麼'map(dict,(zip(values.keys(),v)for zip in zip(* values.values())))'給你列表,然後迭代並將每個值傳遞給你類+執行功能。 –

+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())