【问题标题】:How can i add to a list in python without creating it如何在不创建列表的情况下添加到 python 中的列表
【发布时间】:2020-11-02 13:58:56
【问题描述】:

我有以下 django 视图来查找问卷的平均分数。

@login_required
def statistics(request, slug=False):
    qn = get_object_or_404(Questionnaire, slug=slug)
    questions = Question.objects.filter(questionnaire=qn).count()
    qs = Question.objects.filter(questionnaire=qn)
    responses = Response.objects.filter(question__in=qs, user=request.user).count()
    if questions == 0 or responses == 0 or not questions <= responses:
        return render(request, "questionnaire/stats.html")
    out = {}
    for q in qs:
        response = Response.objects.filter(question=q, user=request.user).order_by("session_datetime").first()
        out[q.category] = {}
        time = response.session_datetime
        time_string = time.strftime("%d/%m/%Y")
        out[q.category][time_string] = []
        responses_in_time = Response.objects.filter(question=q, user=request.user, session_datetime__gte=time,
                                                    session_datetime__lt=time + datetime.timedelta(hours=24))
        for res in responses_in_time:
            out[q.category][time_string] += [res.value]
    print(out)
    for category in out.keys():
        print("outcat"+ str(out[category]))
        for time in out[category].keys():
            out[category][time] = sum(out[category][time])/len(out[category][time])
    print(out)
    return render(request, "questionnaire/stats.html", context={"questionnaire": qn, "stats_json": json.dumps(out)})

我想知道是否有一种方法可以将字典与循环中的模型/记录中的时间放在一起而无需每次都重置它,如果我尝试 += 而不先创建它会抱怨但我不知道循环内的初始时间。

【问题讨论】:

    标签: python python-3.x django list loops


    【解决方案1】:

    好的,所以我不知道为什么我只能在我发布后才想出答案,但这是工作代码。通过循环两次,一次创建字典,一次填充它,我已经解决了这个问题。

    @login_required
    def statistics(request, slug=False):
        qn = get_object_or_404(Questionnaire, slug=slug)
        questions = Question.objects.filter(questionnaire=qn).count()
        qs = Question.objects.filter(questionnaire=qn)
        responses = Response.objects.filter(question__in=qs, user=request.user).count()
        if questions == 0 or responses == 0 or not questions <= responses:
            return render(request, "questionnaire/stats.html")
        out = {}
        response = Response.objects.filter(question=qs.first(), user=request.user).order_by("session_datetime").first()
        time = response.session_datetime
        time_string = time.strftime("%d/%m/%Y")
        for q in qs:
            out[q.category] = {}
            out[q.category][time_string] = []
        for q in qs:
            responses_in_time = Response.objects.filter(question=q, user=request.user, session_datetime__gte=time,
                                                        session_datetime__lt=time + datetime.timedelta(hours=24))
            for res in responses_in_time:
                out[q.category][time_string] += [res.value]
        print(out)
        for category in out.keys():
            print("outcat"+ str(out[category]))
            for time in out[category].keys():
                out[category][time] = sum(out[category][time])/len(out[category][time])
        print(out)
        return render(request, "questionnaire/stats.html", context={"questionnaire": qn, "stats_json": json.dumps(out)})
    

    【讨论】:

      猜你喜欢
      • 2017-11-26
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多