我有一个下面给定格式的巨大数据列表。我需要提取2000年的所有数据。当我尝试实现它时,我得到了一个错误"invalid literal for int((with base 10:"year">
这是我用来提取数据的代码。而且它似乎不起作用。
['title','country','year','val',]
['bm','china','1987','2200']
['bm','japan','2000','1600']
['bm','germany','2000','70']
#it doesnt seem to work
new=[]
for i in list:
if i[2]==2000:
new.append(int(i))
您可以尝试
new = [i for i in list[1:] if '2000' == i[2]]
list是python中的一个关键字。最佳做法是避免在代码中使用它。
出现文字错误的原因是您的代码试图将String"Year"转换为int。从转换中删除第一个列表(headers(。
1st,您应该NOT将变量命名为list
,因为list
是Python的内置数据类型。您应该NOT将变量和函数命名为与内置类型和函数相同的名称。使用其他东西,例如mylist
。
第二,它可能不起作用,因为您在循环中包含了列表['title', 'country', 'year', 'val',]
,而i[2]
将是"year"
,当您尝试将"year"
(字符串(强制转换为int时,它引发了错误。
一种选择是跳过第一个看起来像标题的列表。
mylist = [
['title','country','year','val',],
['bm','china','1987','2200'],
['bm','japan','2000','1600'],
['bm','germany','2000','70']
]
new=[]
for i in mylist[1:]:
year = int(i[2])
if year==2000:
new.append(i)
print(new)
# [['bm', 'japan', '2000', '1600'], ['bm', 'germany', '2000', '70']]
如果你不知道i[2]
是否是一个有效的整数值,另一个选项是try
进行强制转换,如果失败,就跳过它:
mylist = [
['title','country','year','val',],
['bm','china','1987','2200'],
['bm','japan','2000','1600'],
['bm','germany','2000','70']
]
new=[]
for i in mylist:
try:
year = int(i[2])
except ValueError:
continue
if year==2000:
new.append(i)
print(new)
# [['bm', 'japan', '2000', '1600'], ['bm', 'germany', '2000', '70']]