迭代列表时出现KeyError
抱歉如果这个问题听起来很傻,但我想了很久这个问题,并且查阅了Jinja的文档,但到目前为止还没有找到答案。简单介绍一下我的背景:我刚刚完成了Udacity的CS101和CS253课程,现在准备帮助一个朋友为瑜伽工作室建立一个预约系统。这个系统都是在Google Appengine上运行的,就像
我想要有一个可用瑜伽课程的列表,类似于这个:
Monday
Dynamic Yoga with Mary 6pm
Soft yoga with Susie 8pm
Wednesday
Hatha yoga with Bob 5pm
Hot yoga with Alice 7pm
所以我想获取课程列表,然后查看周一是否有瑜伽课。如果有的话,我就把'周一'加到列表里,并把所有周一的课程也加上,其他的日子也是这样处理。像这样:
day_output1 = ['Monday',['Dynamic Yoga with Mary 6pm'],['Soft yoga with Su..']]
day_output2 = ['Wednesday',['Hatha yoga with Bob 5pm'],['Hot yoga with Al...']]
然后把这些加到一整周的列表中,最后发送到模板里:
weekly_classes = [day_output1, day_output2]
现在我遇到了一个KeyError,这意味着它找不到这个键,但我不明白为什么会这样?
File "/Users/username/YogaSchemat/yogaschema/main.py", line 113, in get
day = d[n]
KeyError: 1
用这段代码...提前谢谢大家!
d = {
"1": 'Monday',
"2": 'Tuesday',
"3": 'Wednesday',
"4": 'Thursday',
"5": 'Friday',
"6": 'Saturday',
"7": 'Sunday'
}
def get_classes():
yoga_classes = Schema.all() #appengine DB request
if yoga_classes:
weekly_classes = [] #list that will be sent to template
for n in range(1,8):
for e in yoga_classes:
if e.weekday == n:
day = d[n] #getting weekday from d
class_details = [] #
class_details.append(e)
day_output = [day,class_details]
weekly_classes.append(day_output)
self.response.out.write(weekly_classes)
1 个回答
1
你在 d
这个映射中使用的是字符串作为键,但你却在查找一个 整数。
在这种情况下,你应该使用列表来代替:
d = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# ...
for n in range(7):
day = d[n]
这里的 n
是从 0 到 6 的数字,直接对应到 d
列表中那些位置的星期名称。
另外,你也可以使用整数作为键:
d = {
1: 'Monday',
2: 'Tuesday',
3: 'Wednesday',
4: 'Thursday',
5: 'Friday',
6: 'Saturday',
7: 'Sunday'
}
但因为你的键是连续的,所以其实可以节省一些空间。