为什么我的代码读取CSV文件,打印字典而不是列表?

时间:2018-09-12 14:09:48

标签: python python-2.7 csv

import unicodecsv

def read_csv(filename):
    with open(filename, 'rb') as f:
        reader = unicodecsv.DictReader(f)
        return list(reader)

enrollments = read_csv('enrollments.csv')
daily_engagement = read_csv('daily-engagement.csv')
project_submissions = read_csv('project-submissions.csv')

在上一课中,我学习了如何读取CSV文件并将其转换为可编辑格式。该代码很好用,但是当我试图理解该代码时,却不明白为什么在打印enrollments[0]时结果是字典。

函数的第一部分使用with open(filename, 'rb') as f:,我知道它是用来打开文件的。

下一部分是reader = unicodecsv.DictReader(f),我了解它用于将读取的信息映射到字典中。

第三部分是我难以理解的地方,return list(reader)行。这行难道不是将reader变量作为list()返回吗?

那为什么在我使用print时为什么返回字典?

print enrollments[0]

{u'account_key': u'448',
 u'cancel_date': u'2015-01-14',
 u'days_to_cancel': u'65',
 u'is_canceled': u'True',
 u'is_udacity': u'True',
 u'join_date': u'2014-11-10',
 u'status': u'canceled'}

2 个答案:

答案 0 :(得分:0)

注册是一个列表

注册人数[0]是字典

所以报名是词典列表。

一切正常,read_csv返回一个(字典)列表

答案 1 :(得分:0)

  

第二部分reader = unicodecsv.DictReader(f)我了解它用于将读取的信息映射到字典中。

关闭,但不太正确。

DictReader()将输入CSV文件中的每行放入字典中。这样就得到了词典的系列,而没有一个字典。您可以通过 iterating 获得这些行,就像使用for循环(for row in reader: ...)一样。 list()使用reader作为迭代器来创建所有行的列表。

  

return list(reader)在这里我不是告诉计算机将变量阅读器作为列表返回吗?

是的,您正在将reader对象传递给list(),该对象从文件中的所有行生成一个列表对象。每行都将转换为字典,因此最终结果是字典列表。您可能会看到它是result = [] for row in reader: result.append(row),而result列表是该函数返回的内容。

然后获取该列表,并使用0 index 对该列表进行索引,因此您要求在列表中输入 first

print enrollments[0]

这不会打印整个列表,而是从列表中 打印一个元素。而且那个元素是一个字典,因为这是文件中第一行数据的数据。

如果要打印列表本身,请使用

print enrollment