如何在列表中的列表中获取两个值?

时间:2018-05-04 00:12:08

标签: python python-3.x

我试图想出一个可以读取.csv档案的功能,从那里我可以得到例如学生考试成绩,例如:

NOME,G1,G2  
Paulo,5.0,7.2  
Pedro,6,4.1  
Ana,3.3,2.3  
Thereza,5,6.5  
Roberto,7,5.2  
Matheus,6.3,6.1  

我设法在,部分分割了这些线条,但我最终得到了一个矩阵:

[['NOME', 'G1', 'G2'], ['Paulo', '5.0', '7.2'], ['Pedro', '6', '4.1'], ['Ana', '3.3', '2.3'], ['Thereza', '5', '6.5'], ['Roberto', '7', '5.2'], ['Matheus', '6.3', '6.1']]  

如何从一个列表转到另一个列表并设法获得其中的成绩? 这是我到目前为止的代码:

def leArquivo(arquivo):  
    arq = open(arquivo, 'r')   
    conteudo = arq.read()
    arq.close
    return conteudo

def separaLinhas(conteudo):
    conteudo=conteudo.split('\n')
    conteudo1 = []
    for i in conteudo:
        conteudo1.append(i.split(','))
    return conteudo1

我从哪里开始?

2 个答案:

答案 0 :(得分:2)

一个简单的for会做到这一点,即:

notas = [['NOME', 'G1', 'G2'], ['Paulo', '5.0', '7.2'], ['Pedro', '6', '4.1'], ['Ana', '3.3', '2.3'], ['Thereza', '5', '6.5'], ['Roberto', '7', '5.2'], ['Matheus', '6.3', '6.1']]

for nota in notas[1:]: ## [1:] skip the first item
    nome = nota[0]
    g1 = nota[1]
    g2 = nota[2]
    print ("NOME:{} | G1: {} | G2: {}".format(nome, g1, g2))

DEMO

PS:如果您需要执行数学运算,您可能希望将g1g2投射到float - float(nota[1])

答案 1 :(得分:1)

由于您正在使用csv文件,因此您可能需要查看Python中的csv模块。该模块有许多方便的选项和形式,可以在其中读取数据。以下是csv.DictReader阅读和使用的示例

import csv

# Read the data
with open('data.csv') as f:
    reader = csv.DictReader(f)
    data = [row for row in reader]

# Print it
for row in data:
    print (' ').join(['Nome:',row['NOME'],'G1:',row['G1'],'G2:',row['G2']])

# Print only names and G2 grades as a table
print '- '*10
print 'NOME\t' + 'G2'
for row in data:
    print row['NOME'] + '\t' + row['G2']

# Average of G1 and G2 for each student
print '- '*10
print 'NOME\t' + 'Average'
for row in data:
    gpa = (float(row['G1']) + float(row['G2']))/2.0
    print row['NOME'] + '\t' + str(gpa)

此处数据作为字典列表读取 - 列表中的每个元素都是表示数据集单行的字典。字典键是标题的名称(NOMEG1),值是该行的对应值。

在某些情况下,该特定形式可能很有用。在程序的第一部分中,数据使用键和值打印,每行一行。需要注意的是,词典是无序的 - 为了确保以某种特定的顺序打印,我们需要遍历字典"手动"。我使用join只是为了演示format(实际上更强大)的替代方法,或者只是在两者之间键入空格。第二个用法示例将名称和第二个等级打印为具有适当标题的表。第三个计算平均值并将其打印为表格。

对我来说,这种方法在处理具有数千个条目的数据集时非常有用,这些条目有很多列 - 标题 - 我想单独研究(因此我不介意它们不按顺序排列)。要获取有序字典,您可以使用OrderedDict或考虑其他可用的数据结构。我也使用Python 2.7,但由于你将问题标记为3.X,链接指向3.X文档。