如何从 Python 中的列表列表中获取特定值?

时间:2021-08-01 17:57:39

标签: python python-3.x

我有一个 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'

我该怎么做?

3 个答案:

答案 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)

您可以使用 filterlambda 查找第一个元素为 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)