Python 3可以';t在for循环外打印字典

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

我正在处理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.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