Python编程:如何从字典中评估值?

时间:2015-11-11 08:01:47

标签: python string dictionary eval

给定字符串

eval (str)

字典

for item in dict.items():
k , v  = item
if s.find(k) > -1:
 k=str(k)
 s=s.replace(k, str(v),1)
 print "replaced",s

print eval(s)

我们需要在字符串中替换dict中的值并评估

int destinationType = [[args objectForKey:@"destinationType"] intValue];

下面的代码适用于所有整数情况:

 extension NSNull {

     func intValue() -> Int {
         return 0
     }
 }

有没有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:6)

eval接受可选词典(globalslocals)。您不需要手动替换字符串:

>>> s = "dept_id == 'CS1' and student_count > 75 "
>>> d = {'dept_id': 'CS1' ,'student_count': 95 }
>>> eval(s, d)
True
>>> d = {'dept_id': 'CS1' ,'student_count': 35 }
>>> eval(s, d)
False

BTW,使用strdict作为变量名称并不是一个好主意。它们会影响内置函数/类型strdict

答案 1 :(得分:1)

无论如何,在尝试使用字典提供的字典解决方案时发现这很有用:

import ast # helps with converting str representation of python data structures
dictionary = "{'a':'a1', 'b':'a2', 'c':'a3' }"
parsed_dictionary = ast.literal_eval(dictionary)
>>> {'a':'a1', 'b':'a2', 'c':'a3'}

这可能不是问题的确切答案,但可能对寻找安全解决方案或遇到类似问题的人有帮助。

使用ast库:

  

提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。

正如@IanAuld评论的那样,我想补充说ast.literal_eval()更安全,因为在尝试使用上面列出的结构解析字符串时会引发错误。当然,eval()会毫不犹豫地删除数据;)我不建议运行此命令。