我将2 MB的数据作为字符串转换为字典。输入已以JSON序列化。
无论如何,我当前正在使用ast.literal_eval,并且得到了我想要的字典,但是当我尝试仅运行eval时,它似乎运行得更快,并且还返回了相同的结果。
当eval正常工作时,是否有任何理由使用ast模块或json模块?
我真的不喜欢这种对stackoverflow(以及其他地方)的态度,告诉没有任何上下文的人们他们所做的事情是不安全的,他们不应该这样做。也许这只是导入某些数据的一次性脚本,在这种情况下,为什么不选择最快或最方便的方式呢?
但是,在这种情况下,json.loads它不仅更安全,而且速度快4倍以上(取决于您的数据)。
json.loads
In [1]: %timeit json.loads(data) 10000 loops, best of 3: 41.6 µs per loop In [2]: %timeit eval(data) 10000 loops, best of 3: 194 µs per loop In [3]: %timeit ast.literal_eval(data) 1000 loops, best of 3: 269 µs per loop
如果您认为它有意义,那么json是一种比python更受限制的语言/格式,因此使用优化的解析器进行解析必须更快。