【发布时间】:2015-06-07 02:50:57
【问题描述】:
我有一个类似
的字符串str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]"
我目前正在使用:
exec("str2list_sample = "+ str_sample)
有没有更清洁的方法来做到这一点?
【问题讨论】:
我有一个类似
的字符串str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]"
我目前正在使用:
exec("str2list_sample = "+ str_sample)
有没有更清洁的方法来做到这一点?
【问题讨论】:
首先不要将变量命名为str,因为它会影响内置变量。
要解决您的问题,您可以使用ast.literal_eval
>>> a = "[[1, 2], [2.0, 0.3], ['a', 'b']]"
>>> import ast
>>> ast.literal_eval(a)
[[1, 2], [2.0, 0.3], ['a', 'b']]
解决您的最新编辑问题
>>> str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]"
>>> ast.literal_eval(str_sample)
[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]
【讨论】:
使用eval,但这不是good practice
eval("[[1, 2], [2.0, 0.3], ['a', 'b']]")
[[1, 2], [2.0, 0.3], ['a', 'b']]
【讨论】:
literal_eval 如果它不是有效的数据类型,则会引发异常,但eval 将评估所有 python 表达式,所以你需要确定你给 eval 的输入没有危险。
eval 不好。