d = ['X + Y = Z', 'X <=Y']
p = [{'Y': 1, 'X': 0, 'Z': 0}, {'Y': 1, 'X': 0, 'Z': 3}, {'Y': 1, 'X': 0, 'Z': 6}, {'Y': 1, 'X': 0, 'Z': 9}, {'Y': 1, 'X': 1, 'Z': 0}, {'Y': 1, 'X': 1, 'Z': 3}]
我需要创建一些可以存储表达式List的结构,其中变量被更改。
我需要知道: X,Y,Z当前值 更改字母到整数的表达式
并且它必须是每个值的字典
问题是看看X,Y,Z,所有表达式都是真的
答案 0 :(得分:3)
根据你的表达方式(所以你可以信任它们),一个简单的解决方案就是像这样使用eval():
correct_values = []
for value in p:
#if eval(d[0], value) and eval(d[1], value): # basic version
if all(eval(exp, value) for exp in d): # ehanced version thanks to @isbadawi
correct_values.append(value)
但是您必须更正表达式X + Y = Z
无效的python,X + Y == Z
是一个有效的python表达式。
但是使用您在示例中给出的值,没有任何匹配:(
答案 1 :(得分:0)
我会选择比使用eval
更安全的解决方案:
p = [{'Y': 1, 'X': 0, 'Z': 0}, {'Y': 1, 'X': 0, 'Z': 3},
{'Y': 1, 'X': 0, 'Z': 6}, {'Y': 1, 'X': 0, 'Z': 9},
{'Y': 1, 'X': 1, 'Z': 0}, {'Y': 1, 'X': 1, 'Z': 3}]
f = lambda v: all([v['X'] + v['Y'] == v['Z'],
v['X'] <= v['Y'],
2*v['X'] + v['Y'] < v['Z']])
print [f(k) for k in p]
# Output: [False, False, False, False, False, False]