我有这种类型的词典x={'a':1,'b':2}
。
我还有一个dict,我存储了公式
x1={'c':{'p':'pre','r':'ref','2010':'a+b'},'d': {'p':'pre','r':'ref','2010':'f+g'}
我正在使用eval来计算公式。为此,我使用代码
for k,v in x1.iteritems():
if eval(x1[k]['2010'],x) is False:
continue
实际上“a”和“b”的值是他们的,但“f”和“g”的值不是他们的
eval(x1['c']['2010'],x)
有效但eval(x1['d]['2010'],x)
失败,所以我想跳过此评估。但它显示'f'没有定义。
答案 0 :(得分:1)
为什么要使用eval()
?为什么不测试价值呢?
此外,由于您使用.items()
获得了密钥和值,因此您无需重新引用该字典。
for k, v in x.items():
if not v:
continue
答案 1 :(得分:0)
您可能想尝试:
for k,v in x1.iteritems():
try:
eval(x1[k]['2010'],x)
except NameError:
continue
但恕我直言,这个概念有些奇怪 - 或者我只是不明白......
顺便说一句:x1的定义中缺少右括号。
答案 2 :(得分:0)
您缺少一个概念:lambda表达式。它们允许您创建单表达式函数。
因此,您可以eval('a+b', {'a':1,'b':2})
代替(lambda a,b: a+b)(1,2)
。 Lambda表达式(如函数)是可以在dict中保存的第一类对象。