Pythonic方式转换多种类型的列表(包括列表!)

Hoo*_*ked 1 python casting type-conversion

给定一个令牌列表以及这些令牌的正确的已知类型表示,如何将该类型映射到列表中?如果类型是intfloats我可以调用int(x)字符串将值转换为int,但如果我的类型是list(或说a numpy.array),则会失败.进行转换的最pythonic方式是什么?eval这里不是一个选项,因为数据基本上是未经过清理的.一个例子:

line     = "0 0 62.9695 [16.859,-17.1135,46.6351] [7.1759,29.3009,83.1399]"
tokens   = line.split()
type_key = [int,int,float,list,list] # Lists do not convert properly here

print [T(x) for T,x in zip(type_key,tokens)]
Run Code Online (Sandbox Code Playgroud)

相关:如何在Python中将具有多种类型的列表转换为二进制?

Gar*_*tty 8

你想要的是ast.literal_eval(),它是为此目的而设计的.

>>> ast.literal_eval("[16.859,-17.1135,46.6351]")
[16.859, -17.1135, 46.6351]
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的评论中的问题:

def literal_eval_to_array(literal):
    return np.array(ast.literal_eval(literal))
Run Code Online (Sandbox Code Playgroud)

然后,你可以简单地使用literal_eval_to_array()你的type_key-请记住,一个函数调用和实例都是一样到Python.