Skip to main content
 首页 » 编程设计

python之在 Django 中按键值对大量字典进行分组

2025年05月04日26bhlsheji

我有一个字典列表如下

[{'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}] 

我通过以下方式组合 2 个查询集得到了这个列表:

grade_list = list(past_enrollments) + list(current_enrollments) 

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

[{'grade': '1', 'past_student_sum': 1611, 'current_student_sum': 1621}, 
 {'grade': '2', 'past_student_sum': 1511, 'current_student_sum': 1521}] 

请您参考如下方法:

我不是从 past_enrollments 和 current_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) 

然后我们完成的字典就是那个字典的值

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}]