【问题标题】:Cannot properly modify list of dictionaries无法正确修改字典列表
【发布时间】:2016-11-25 14:31:16
【问题描述】:

我正在尝试将initial (es_initial) 数据提供给我的formset,其中initial 是一个字典列表。我的 view.py 有以下代码:

        # get all answers by  current student
        es_answers_by_student = models.Answer.objects.filter(
            student__user=request.user
        ).filter(
            question__quiz=step
        ).filter(
            eq_answer_text__icontains=''
        )
        # supply question prompt to the initial data
        for es_question in eqs:
            es_dict_for_initial.update({'question': es_question.prompt},)
            es_initial.append(es_dict_for_initial.copy())
        # supply saved answers
        for answer in es_answers_by_student:
            for _dict in es_initial:
                _dict["eq_answer"] = answer.eq_answer_text

        print(es_initial)

无法理解,为什么我的最后一个 for 循环总是返回与 es_answers_by_student 查询集中的最后一个值相同的值

编辑:

执行第一个for 循环后,es_initial 看起来像:

 [{'question': 'question text 1'}, {'question': 'question text 2'}]

这是我在第二个for 循环之后想要完成的:

[{'question': 'question text 1', 'eq_answer': 'answer text 1'},
 {'question': 'question text 2', 'eq_answer': 'answer text 2'}]

【问题讨论】:

  • 这是预期的:您在answer 上循环,并且您的内部循环分配相同的字典数据,而不依赖于answer。你想达到什么目标?
  • 你能提供一个minimal, complete, and verifiable example吗?您的最后一个 for 循环将 es_answers_by_student 列表 (?) 中的最后一个值写入 es_initial 列表中的每个字典,但是您希望/希望它做什么?
  • 你最好展示一下在所有循环之后的样子
  • 它看起来像以下 [{'eq_answer': '答案文本', 'question': '问题文本 1?'}, {'eq_answer': '答案文本', ' question': '问题文本 2?'}, {'eq_answer': '答案文本', 'question': '问题文本 3?'}, {'eq_answer': '答案文本', '问题' : '问题文本 4?'}].

标签: python django list dictionary


【解决方案1】:

我认为您只想循环遍历_dicts,并在循环内更改答案,如下所示:

for _i, dict in enumerate(es_initial):
    _dict["eq_answer"] = es_answers_by_student[i].eq_answer_text

这隐含地假设es_initiales_answers_by_student 的顺序是相同的,否则您必须找到某种方法来索引es_answers_by_student 列表以找到正确的项目。

【讨论】:

  • 感谢 Nils Gudat,它对我有用。我还在学习python和django的过程中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2012-08-04
  • 1970-01-01
  • 2014-10-17
  • 2019-10-06
  • 1970-01-01
  • 2019-08-19
相关资源
最近更新 更多