Python 3可以';t在for循环外打印字典
我正在处理CSV文件数据,需要将其拆分为字典。我正在使用以下代码:Python 3可以';t在for循环外打印字典,python,for-loop,Python,For Loop,我正在处理CSV文件数据,需要将其拆分为字典。我正在使用以下代码: ga_session_data = {} ga_pageviews_data = {} file = open('files/data.csv', 'r') for line in file: page, sessions, pageviews = line.split(',') sessions = int(sessions.strip()) pageviews = int(pageviews.st
ga_session_data = {}
ga_pageviews_data = {}
file = open('files/data.csv', 'r')
for line in file:
page, sessions, pageviews = line.split(',')
sessions = int(sessions.strip())
pageviews = int(pageviews.strip())
ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}
file.close()
print(ga_session_data)
print(ga_pageviews_data)
由于某些原因,我无法打印循环外部字典中存储的所有数据。它只打印每行的第一行 在循环的每次迭代中,您都会使用单个项创建新词典 要解决此问题,请在
for
循环中更改:
ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}
致:
您没有向初始的空词典添加任何内容。您每次都要用新词典替换它们:
ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}
这是两个新字典,每个字典都有一个键值对。最后,在处理完文件中的最后一行之后,剩下的是文件中最后一行的信息,以及在替换之前处理的所有信息
如果要添加到初始词典中,请使用键赋值:
ga_session_data[page] = sessions
ga_pageviews_data[page] = pageviews
您可以将int()
转换内联到赋值表达式中:
for line in file:
page, sessions, pageviews = line.split(',')
ga_session_data[page] = int(sessions)
ga_pageviews_data[page] = int(pageviews)
请注意,int()
不太关心数字周围的额外空格,因此不需要调用str.strip()
接下来,我不会再发明CSV阅读轮;使用:
我还将file对象用作上下文管理器,因此您不必再对其显式调用file.close()
。问题
它正在印刷整本词典。在创建字典时,问题在于循环:
ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}
这将在循环的每次迭代后创建一个新的字典,因此在循环结束时,您只需拥有一个字典,其中最后一页对应于最后一个会话
解决方案
在循环中使用以下语法:
ga_session_data = {}
ga_pageviews_data = {}
for line in file:
page, sessions, pageviews = line.split(',')
sessions = int(sessions.strip())
pageviews = int(pageviews.strip())
ga_session_data[page] = sessions
ga_pageviews_data[page] = pageviews
现在,您的代码将添加到字典中,而不是简单地创建一个新字典。这是因为您在顶部定义了字典,循环末尾的语法是在同一字典中创建一个新的键值对,而不是像以前一样创建一个新字典并将其分配给同一个变量。它不会打印第一行。它会打印最后一行的。谢谢。本周刚开始学习Python,所以只是尝试了解基本知识。
ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}
ga_session_data = {}
ga_pageviews_data = {}
for line in file:
page, sessions, pageviews = line.split(',')
sessions = int(sessions.strip())
pageviews = int(pageviews.strip())
ga_session_data[page] = sessions
ga_pageviews_data[page] = pageviews