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

2024-05-14 02:36:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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


Tags: 文件csv数据data字典sessionlinepage
3条回答

在循环的每次迭代中,您都使用单个项创建新字典。在

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

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

收件人:

^{pr2}$

您不能在初始的空字典中添加任何内容。每次都要用新的词典替换它们:

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

这是两个新字典,每个字典都有一个键值对。最后,在处理完文件中的最后一行之后,剩下的是文件中最后一行的信息,以及在替换之前处理过的所有内容。在

如果要添加到初始词典,请使用赋值键:

^{pr2}$

您可以将int()转换内联到赋值表达式中:

for line in file:
    page, sessions, pageviews = line.split(',')
    ga_session_data[page] = int(sessions)
    ga_pageviews_data[page] = int(pageviews)

{{cd3>不需要多加空格。在

接下来,我不会重新发明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对象用作上下文管理器,因此您不再需要显式地调用file.close()。在

问题

它正在印刷整本词典。您的问题在于创建字典时的循环:

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

这将在循环的每次迭代之后创建一个新字典,因此在最后,您只需要一个字典,其中最后一页对应于最后一个会话。在

解决方案

在循环中使用以下语法:

^{pr2}$

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

相关问题 更多 >