1

关于迭代,我有一个相当菜鸟的问题,我似乎无法正确回答。

我有一个表格,其中包含用户完成的每个月度测试的记录,如果他们错过了一个月,那么表格中就没有记录。

我想从表中提取用户历史记录,然后在 12 个月的每个月中为其完成状态设置 Y 或 N。

这是我的代码:

    def getSafetyHistory(self, id):
    results = []
    safety_courses = UserMonthlySafetyCurriculums.objects.filter(users_id=id).order_by('month_assigned')
    for i in range(1, 13):
        for s in safety_courses:
            if s.month_assigned == i:
                results.append('Y')
            else:
                results.append('N')

    return results

所以我的理想结果将是一个包含 12 个条目的列表,Y 或 N 即 results = [N,N,Y,N,N,Y,Y,Y,N,N,N,Y]

上面的查询为用户返回了 2 条记录,这是正确的,但在我的迭代中,我不断收到 24 个条目,显然是由于外部和内部循环,但我不确定“pythonic”方式我应该这样做没有大量的嵌套循环。

4

1 回答 1

1

可能有很多方法可以做到这一点。这是一个想法。

看起来您只会获得已完成课程的记录。所以你可以预先建立一个包含 12 个结果的列表,全部设置为 no。然后在查询数据库后,将与您得到的结果相对应的那些翻转为是。

results = ['N'] * 12  # prebuild results to all no

safety_courses = UserMonthlySafetyCurriculums.objects.filter(
                     users_id=id).order_by('month_assigned')

for course in safety_courses:
    results[course.month_assigned - 1] = 'Y'

正如您的代码所暗示的那样,这假定month_assigned是 1 到 12 之间的整数。

于 2013-04-09T17:45:58.467 回答