亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的代碼,讀取 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 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號