Python 在列表上迭代时出现KeyError

Python 在列表上迭代时出现KeyError,python,google-app-engine,Python,Google App Engine,我很抱歉,如果这是一个愚蠢的问题,但我已经考虑了很多,并通过Jinja文件,但到目前为止没有任何效果。简短背景:我刚刚完成了Udacity的CS101和CS253,我将帮助一位朋友建立一个瑜伽工作室的预订系统。这一切都在谷歌Appengine上,就像 我想有一个类似的瑜伽课程列表: Monday Dynamic Yoga with Mary 6pm Soft yoga with Susie 8pm Wednesday Hatha yoga with Bob 5pm Hot yoga w

我很抱歉,如果这是一个愚蠢的问题,但我已经考虑了很多,并通过Jinja文件,但到目前为止没有任何效果。简短背景:我刚刚完成了Udacity的CS101和CS253,我将帮助一位朋友建立一个瑜伽工作室的预订系统。这一切都在谷歌Appengine上,就像

我想有一个类似的瑜伽课程列表:

Monday

Dynamic Yoga with Mary 6pm

Soft yoga with Susie 8pm

Wednesday

Hatha yoga with Bob 5pm

Hot yoga with Alice 7pm
所以我想去拿课程表,然后看看星期一有没有瑜伽课。如果有,我会在列表中加上“星期一”和所有的星期一课程,以此类推。像这样:

day\u output1=[“周一”,“下午6点与玛丽一起做动态瑜伽”,“与苏一起做柔软瑜伽]

day_output2 = ['Wednesday',['Hatha yoga with Bob 5pm'],['Hot yoga with Al...']]
然后将这些内容添加到整个星期的列表中,然后发送到模板:

weekly_classes = [day_output1, day_output2]
现在我得到一个密钥错误,这意味着它找不到密钥,但我不明白为什么

  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)

您在
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'
}

但是,由于您的键是连续的,您也可以节省空间。

您在
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'
}

但是,由于您的钥匙是按顺序排列的,您还可以节省空间。

谢谢,这就解决了问题!你也在挪威吗?:)我是瑞典人Oslo@SatoBolin:哈得!是的,我是维斯特沃德地区的达奇人。谢谢你,这就解决了问题!你也在挪威吗?:)我是瑞典人Oslo@SatoBolin:哈得!是的,我是维斯特沃德地区的达奇人。