如何在defaultdict中使用两个键?

时间:2016-09-19 11:00:04

标签: python django defaultdict

我正在尝试使用嵌套键创建一个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

1 个答案:

答案 0 :(得分:1)

您的问题并不完全清楚,但我认为您需要一个defaultdict,它本身包含一个列表的默认值。所以:

class_details = defaultdict(lambda: defaultdict(list))

或者,您可能根本不需要嵌套字典;你可以改为使用带有元组键的原始默认值:

class_details[(cls.day, cls.period)].append(cls)