将包裹为字符串的元组转换为python中的元组的简单方法

时间:2014-06-05 04:48:55

标签: python tuples

如果从csv读取字符串'(1,2,3)',我该如何将其转换为元组(1,2,3)?我尝试了tuple('(1,2,3)'),但获得('(', '1', ',', '2', ',', '3', ')')而不是(1,2,3)。我认为这可能是合理的,因为int('1')返回1。

现在代码

tuple(map(int, re.split('[(),]', '(1,2,3)')[1:-1]))

通过返回['', '1', '2', '3', ''],修剪边缘,将条目转换为整数,最后将结果列表转换为元组来工作。我想知道是否有一种更简单的方法可以做到这一点,也许类似于int(' 1')。

编辑:如果我的字符串包含带逗号或括号的字符串,则此解决方案将失败。我想要更强大的东西。

3 个答案:

答案 0 :(得分:11)

使用ast.literal_eval,它比eval

更安全
import ast
ast.literal_eval('(1,2,3)')

结果:

(1, 2, 3)

这也适用于列表,词典,数字等。

答案 1 :(得分:1)

如果您信任您的输入,则可以使用eval

>>> inp = "(1, 2, 3)"
>>> eval(inp)
(1, 2, 3)

如果您不信任它,请按照“GWW”

的建议使用ast.literal_eval

答案 2 :(得分:1)

您可以删除(),然后根据,进行拆分。最后通过tuple将单个项目转换为整数,将列表转换为int的元组。

data = '(1,2,3)'
print tuple(int(item) for item in data.strip("()").split(","))
# (1, 2, 3)