我正在尝试使用嵌套键创建一个defaultdict。这是我写的视图,但显然多个键在defaultdict中不起作用。
def routine_view(request, klass_id):
days = Routine.DAYS
periods = Routine.PERIODS
class_details = defaultdict(list)
classes = Routine.objects.filter(klass_id=klass_id)
for cls in classes:
class_details[cls.day][cls.period].append(cls)
context = {
"days": days,
"periods": periods,
"class_details": class_details
}
return render(request, "routine/routine_view.html", context)
当我运行此视图时,出现以下错误:
IndexError at /routine/1/
list index out of range
答案 0 :(得分:1)
您的问题并不完全清楚,但我认为您需要一个defaultdict,它本身包含一个列表的默认值。所以:
class_details = defaultdict(lambda: defaultdict(list))
或者,您可能根本不需要嵌套字典;你可以改为使用带有元组键的原始默认值:
class_details[(cls.day, cls.period)].append(cls)