按照django中的键值对字典列表进行分组

Han*_*nny 1 python django

我有一个字典列表如下

[{'grade': '1', 'past_student_sum': 1611}, 
 {'grade': '2', 'past_student_sum': 1631}, 
 {'grade': '3', 'past_student_sum': 1598}, 
 {'grade': '1', 'current_student_sum': 1611}, 
 {'grade': '2', 'current_student_sum': 1631}, 
 {'grade': '3', 'current_student_sum': 1598}]
Run Code Online (Sandbox Code Playgroud)

我通过以下方式组合2个查询集来获得此列表:

grade_list = list(past_enrollments) + list(current_enrollments)
Run Code Online (Sandbox Code Playgroud)

是否有更好的替代方法以这种方式组合这些以获得如下所示的列表:

[{'grade': '1', 'past_student_sum': 1611, 'current_student_sum': 1621},
 {'grade': '2', 'past_student_sum': 1511, 'current_student_sum': 1521}]
Run Code Online (Sandbox Code Playgroud)

Pat*_*ugh 5

而不是从past_enrollmentscurrent_enrollments建立字典列表,而是使用grade值作为键来构建另一个字典.最简单的方法可能是使用defaultdict

from collections import defaultdict
from itertools import chain

grades = defaultdict(dict)

for d in chain(past_enrollments, current_enrollments):
    grades[d['grade']].update(d)
Run Code Online (Sandbox Code Playgroud)

然后我们完成的词典只是该词典的价值

grades = list(grades.values())
print(grades)
# [{'grade': '1', 'past_student_sum': 1611, 'current_student_sum': 1611}, 
#  {'grade': '2', 'past_student_sum': 1631, 'current_student_sum': 1631}, 
#  {'grade': '3', 'past_student_sum': 1598, 'current_student_sum': 1598}]
Run Code Online (Sandbox Code Playgroud)