我有一个字典列表如下
[{'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)
而不是从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)
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)
| 归档时间: |
|
| 查看次数: |
232 次 |
| 最近记录: |