给定字符串
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
}
}
有没有其他方法可以解决这个问题?
答案 0 :(得分:6)
eval
接受可选词典(globals
,locals
)。您不需要手动替换字符串:
>>> 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
答案 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()
会毫不犹豫地删除数据;)我不建议运行此命令。