使用Python从2000年的列表中提取特定项目



我有一个下面给定格式的巨大数据列表。我需要提取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']]

最新更新