Python 3不能在for循环之外打印字典

时间:2016-07-25 19:16:53

标签: 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.strip())
    ga_session_data = {page: sessions}
    ga_pageviews_data = {page: pageviews}    

file.close()

print(ga_session_data)
print(ga_pageviews_data)

由于某种原因,我无法打印存储在循环外的字典中的所有数据。它只打印每行的第一行。

3 个答案:

答案 0 :(得分:5)

您没有在初始的空字典中添加任何内容。您每次使用词典替换

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读取轮;使用csv module

import csv

ga_session_data = {}
ga_pageviews_data = {}

with open('files/data.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        page, sessions, pageviews = row
        ga_session_data[page] = int(sessions)
        ga_pageviews_data[page] = int(pageviews)

我还将文件对象用作上下文管理器,因此您不必再在其上明确调用file.close()

答案 1 :(得分:3)

问题

正在打印整本字典。当您创建词典时,问题出在您的循环中:

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 

现在你的代码将添加到字典而不是简单地创建一个新字典。这是因为你在顶部定义了字典,循环结束时的语法是在同一个字典中创建一个新的键值对,而不是创建一个新的字典并将它分配给你以前的同一个变量

答案 2 :(得分:2)

在循环的每次迭代中,您都可以创建包含单个项目的新词典。

要解决此问题,请在for循环内更改:

ga_session_data = {page: sessions}
ga_pageviews_data = {page: pageviews}    

要:

ga_session_data[page] = sessions
ga_pageviews_data[page] = pageviews