我最近开始学习
Python,我想编写一个脚本来从CSV列(格式为YYYY / DD / MM)中提取当月的日期,然后将网站用户与月中的几天进行比较(最后是几个月的几周) )作为挑战/学习练习.要点是它提取CSV信息,将其格式化/转换为整数,并将其作为字典一起刷回,将1-31天与网站访问者的数量进行比较.
我的代码如下.我收到的错误是’KeyError:1’第29行结果[天] =用户.我想我明白发生了什么(有点 – 我猜它对我试图将值分配给空字典的方式不满意?它似乎是在寻找整数1作为键而不是找到它? )但我无法弄清楚接下来该做什么.我在学习Python大约两周时间,所以我希望这不是一个愚蠢的问题.我究竟做错了什么?如何将users_by_day的索引[0]和[1]中的列设置为字典中的键和值?
注意:我正在学习和使用Python 3.
import csv
result = {}
with open('analytics.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
users_by_day = list(csv_reader)
for row in users_by_day: #iterate through data
day = row[0].split('/') #split date to extract day of month
try: #skip unsplit cells
day = day[1]
except Exception as e:
pass
row[0] = day #set list column to extracted day value
users_by_day = users_by_day[1:-1] #strip headers
for row in users_by_day:
days = None
users = None
days = int(row[0]) #set values to int for math
users = int(row[1])
if days is not None:
if days in result: #trying to check for days in result
result[days] = users #where key error occurs
else:
result[days] += users
print(result)
最佳答案 对字典的
setdefault()调用对于这种事情是很好的,并且优于{dict}构造中的if {thing}.
所以下面的代码:
if days in result: # trying to check for days in result
result[days] = users # where key error occurs
else:
result[days] += users
可能成为:
result.setdefault(days, 0)
result[days] += users