假设我们有一个名为A
的列表:
A = "1, 200, 1.9;2, 450, 8.2 ;2, 350, 0.3"
我想做的是将上面的字符串转换成字典,第一个元素作为键,第二个元素作为值,然后我要将第一个和第二个元素转换为int
,第三个元素转换为{{1} }。
因此它将如下:
float
第一个和第二个元素分别转换为A = [[1, 200, 1.9],
[2, 450, 8.2],
[3, 350, 0.3]]
,最后一个元素转换为int
我为此尝试了列表理解:
float
收到A = list([int(a), int(b), float(c) for a, b, c in row.split(',')] for row in A.split(';'))
错误:
任何帮助都表示赞赏
答案 0 :(得分:0)
[[float(q) if "." in q else int(q) for q in i.split(",")] for i in A.split(";")]
输出
[[1, 200, 1.9],
[2, 450, 8.2],
[2, 350, 0.3]]
答案 1 :(得分:0)
像[1,2, c for c in range(2)]
这样的代码是无效的语法,因为它模棱两可,并且可能表示以下任何一种含义:
[1,2,(0,1)]
[1,(2,0), (2,1)]
[(1,2,0), (1,2,1)]
不可能分辨出这段代码的含义,因此您必须更加具体。
要获取这些变体中的任何一个,请显式构造元组:
[1,2, tuple(c for c in range(2))]
[1, *((2, c) c for c in range(2))]
[(1, 2, c) c for c in range(2)]
您可能想要最后一个,所以应该是:
[(int(a), int(b), float(c)) for a, b, c in row.split(',')]
答案 2 :(得分:0)
有点难看,但是:
A = "1, 200, 1.9;2, 450, 8.2 ;2, 350, 0.3"
A = [(lambda a,b,c:[int(a),int(b),float(c)])(*x.split(',')) for x in A.split(';')]
print(A)
输出:
[[1, 200, 1.9], [2, 450, 8.2], [2, 350, 0.3]]
为了提高可读性:
A = "1, 200, 1.9;2, 450, 8.2 ;2, 350, 0.3"
def convert(item):
a,b,c = item.split(',')
return [int(a),int(b),float(c)]
A = [convert(item) for item in A.split(';')]
print(A)