为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

料青山看我应如是 2021-06-14 17:32:38
import unicodecsvdef 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'}
查看完整描述

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

第二部分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


查看完整回答
反对 回复 2021-06-16
?
holdtom

TA贡献1805条经验 获得超10个赞

注册是一个列表

注册 [0] 是一个字典

所以注册是一个字典列表。

一切都按预期工作, read_csv 返回一个列表(词典)


查看完整回答
反对 回复 2021-06-16
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信