Python中的多级列表

时间:2013-04-07 16:30:49

标签: python python-2.7

我正在努力解决一个漂亮的菜鸟问题,这在PHP中非常简单,但我对Python很新。我有一个方法,在数据库中查询用户测试数据,然后构建一个字符串,其中包含几个键:将传递给模板的值。

def getTests(self, id):
    results = []
    count = 0
    tests = TestAttempts.objects.all().filter(user_id=id)

    for test in tests:
        title = self.getCourseName(test.test_id)
        results[count].append([{'title': title, 'finished': test.grade_date_time, 'grade': test.test_grade}])
        count += 1
    return results

我希望制作一个多级列表,我可以在模板中循环显示测试标题,完成日期和成绩。

我收到以下错误:

list index out of range
Request Method: GET
Request URL:    http://127.0.0.1:8000/dash/history/
Django Version: 1.4.3
Exception Type: IndexError
Exception Value:    
list index out of range

对于最佳方法的任何帮助将不胜感激。 感谢

2 个答案:

答案 0 :(得分:4)

您不需要计数变量。

results.append([{'title': title, 'finished': test.grade_date_time, 'grade': test.test_grade}])

list.append(x)操作无论如何都会在列表的末尾添加一个项目。

答案 1 :(得分:0)

而不是使用count

进行索引
results[count].append([{'title': title, 'finished': test.grade_date_time, 'grade': test.test_grade}])

您应该直接调用append方法:

results[count].append([{'title': title, 'finished': test.grade_date_time, 'grade': test.test_grade}])

此外,您还要附加包含单个字典的列表。除非你想要做的是extend通过将每个字典添加到列表中的结果(在示例中没有发生),这可能是不必要的:

results[count].append({'title': title, 'finished': test.grade_date_time, 'grade': test.test_grade})