我有一个 CSV 文件,我正在将所有行加载到列表列表中
这是将行加载到列表中的代码:
import csv
with open('ratios.csv', newline='') as csvfile:
data = list(csv.reader(csvfile))
print(data)
代码的输出是这样的:
<块引用>[['Short', 'Total', 'points'], ['asd', '5888', '0.4829'], ['vsd', '5010', '0.6408'], ['trd', '4394', '0.3863'], ['axc', '2366', '0.3629'], ['gtr', '1390', '0.7145'], ['ntr', '1310', '0.7527'], ['尝试','1290','0.2821']]
现在我试图从列表中只获取某个值,例如: 感兴趣的值始终是列表的第三个元素,具体取决于第一个元素
假设我只需要具有第一个元素 'trd'
的列表的第三个元素。因此,从上面的示例中,感兴趣的列表将是 ['trd', '4394', '0.3863']
,而我需要的值是 '0.3863'
。
我该怎么做?
答案 0 :(得分:2)
如果您希望能够根据行的 Short
值访问行,为什么不制作以这种方式构建的 data
dict,而不是您必须迭代的平面列表每次你想从中得到什么?
>>> import csv
>>> with open('ratios.csv') as csvfile:
... data = {row['Short']: row for row in csv.DictReader(csvfile)}
...
>>> data['trd']['points']
'0.3863'
始终以让您的生活更轻松的方式设置您的数据,而不是将其转储为您想到的第一种格式,然后在事后弄清楚如何将其取回。 :)
答案 1 :(得分:1)
您可以使用 filter
和 lambda
查找第一个元素为 trd
的所有列表。
然后您可以遍历结果以从过滤器返回的每个列表中获取第三个元素。
data = [
["Short", "Total", "points"],
["asd", "5888", "0.4829"],
["vsd", "5010", "0.6408"],
["trd", "4394", "0.3863"],
["axc", "2366", "0.3629"],
["gtr", "1390", "0.7145"],
["ntr", "1310", "0.7527"],
["try", "1290", "0.2821"],
]
filtered_data = filter(lambda row: row[0] == "trd", data)
for trd in filtered_data:
print(trd[2])
答案 2 :(得分:1)
您可以只使用列表推导式和 if
语句来查找子列表/三元组的第三个元素...
with open('ratios.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
values = [row[2] for row in reader if row[0] == 'trd']
print(values)
相当于:
import csv
with open('ratios.csv', newline='') as csvfile:
values = []
for row in csv.reader(csvfile):
if row[0] == 'trd':
values.append(row[2])
print(values)