将逗号分隔的值字符串转换为列表,并使用理解将其所有值和键转换为整数或浮点数

时间:2018-09-30 13:35:24

标签: python

假设我们有一个名为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(';')) 错误: 任何帮助都表示赞赏

3 个答案:

答案 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. [1,2,(0,1)]
  2. [1,(2,0), (2,1)]
  3. [(1,2,0), (1,2,1)]

不可能分辨出这段代码的含义,因此您必须更加具体。

要获取这些变体中的任何一个,请显式构造元组:

  1. [1,2, tuple(c for c in range(2))]
  2. [1, *((2, c) c for c in range(2))]
  3. [(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)