将列表作为值时迭代字典

时间:2017-03-03 22:11:34

标签: python dictionary

我有这段代码:

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函数以检查我是否有列表然后添加循环。

我只想迭代dict,比如:

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

2 个答案:

答案 0 :(得分:0)

将其视为字典中的嵌套列表。 localField将评估为1,values['c'][0]将评估为2。

所以你可以:

values['c'][1]

答案 1 :(得分: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]