下面是我的数据片段:
[
['2002','','28','102','5'],
['2003','32','15','88','2'],
]
一年之后是四种可能的类型:A、B、C、D,我想循环浏览每一个,这样我就可以得到一个"长"形式的数据,例如:
{'year':'2002','type':B}x28 (28 of these)
{'year':'2002','type':C}x102
{'year':'2002','type':D}x5
等等;请注意,应该跳过第一次出现的A,因为它有一个空白。
我得到了:
基为10的无效文字int((:">
这很奇怪,因为我确保使用int()
:将读出值转换为int
master_array = []
for i in range(len(tsv_data)):
for j in range(int(tsv_data[i][1])):
temp = {}
temp['type']='A'
master_array.append(temp)
我只是继续尝试:
master_array = []
for i in range(len(tsv_data)):
try:
for j in range(int(tsv_data[i][1])):
temp = {}
temp['type']='A'
temp['year']=tsv_data[i][0]
master_array.append(temp)
except:
try:
for j in range(int(tsv_data[i][2])):
temp = {}
temp['type']='B'
temp['year']=tsv_data[i][0]
master_array.append(temp)
except:
try:
for j in range(int(tsv_data[i][3])):
temp = {}
temp['type']='C'
temp['year']=tsv_data[i][0]
master_array.append(temp)
except:
for j in range(int(tsv_data[i][4])):
temp = {}
temp['type']='D'
temp['year']=tsv_data[i][0]
master_array.append(temp)
它运行了,但它只给了我实际列表的一小部分。我所期望的行为是try
/except
跳过所有带空格的单元格,并在带值的单元格上迭代。
问题
我如何读取每个单元格中的值,并将它们用作master_array
的迭代提示,并对空格具有鲁棒性?
结果应该是每年一项,并根据值进行类型配置。
只有在值为实际数字时才采用范围。这是一个更简单可读的实现。
master_array = []
for y, a, b, c, d in tsv_data:
if a.isdigit():
master_array.extend([{"year": y, "type": "A"} for _ in range(int(a))])
if b.isdigit():
master_array.extend([{"year": y, "type": "B"} for _ in range(int(b))])
if c.isdigit():
master_array.extend([{"year": y, "type": "C"} for _ in range(int(c))])
if d.isdigit():
master_array.extend([{"year": y, "type": "D"} for _ in range(int(d))])
你可以用更简单的真值检查来完成这项工作,但最好在转换前检查它是一个数字。
if a: # Will work, but better to check int.
master_array.extend([{"year": y, "type": "A"} for _ in range(int(a))])