为什么我的代码,读取 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变量作为 a 返回list()吗?


那么为什么当我使用打印时它会返回一本字典呢?


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'}


料青山看我应如是
浏览 186回答 2
2回答

郎朗坤

第二部分reader = unicodecsv.DictReader(f)我知道它用于将读取的信息映射到字典中。你很接近,但不完全正确。DictReader()将输入 CSV 文件中的每一行放入字典中。所以你会得到一系列字典,而不是一本字典。您通过迭代获得这些行,就像使用for循环 ( for row in reader: ...) 一样。list()用途reader作为一个迭代器创建的所有行的列表。return list(reader) 在这里,我不是告诉计算机将变量读取器作为列表返回吗?是的,您将reader对象传递给list(),它会从文件中的所有行生成一个列表对象。每一行都转换为字典,因此最终结果是一个字典列表。您可以将其视为result = [] for row in reader: result.append(row),result列表是函数返回的内容。然后获取该列表,并使用索引该列表0,因此您请求列表中的第一个条目:print enrollments[0]这不会打印整个列表,而是从list打印一个元素。这个元素是一个字典,因为它是文件中第一行数据的数据。如果您想打印列表本身,请使用print enrollment

holdtom

注册是一个列表注册 [0] 是一个字典所以注册是一个字典列表。一切都按预期工作, read_csv 返回一个列表(词典)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python