Группировка по ключу
Инструмент itertools.groupby()
объединяет смежные словари в группы по общему ключу. Например, сгруппируем студентов с одинаковой оценкой:
people = [{"Имя": "Петр",
"Отчество": "Петрович",
"Фамилия": "Петров",
"Оценка":5},
{"Имя": "Ольга",
"Отчество": "Алексеевна",
"Фамилия": "Иванова",
"Оценка":5},
{"Имя": "Николай",
"Отчество": "Николаевич",
"Фамилия": "Николаев",
"Оценка":4},
{"Имя": "Федор",
"Отчество": "Владимирович",
"Фамилия": "Иванов",
"Оценка":3},
{"Имя": "Владимир",
"Отчество": "Федорович",
"Фамилия": "Иванов",
"Оценка":3}]
def get_mark(person):
return person['Оценка']
person_marks = itertools.groupby(people, get_mark)
for key, group in person_marks:
print(key)
for person in group:
print(person)
print()
5
{'Имя': 'Петр', 'Отчество': 'Петрович', 'Фамилия': 'Петров', 'Оценка': 5}
{'Имя': 'Ольга', 'Отчество': 'Алексеевна', 'Фамилия': 'Иванова', 'Оценка': 5}
4
{'Имя': 'Николай', 'Отчество': 'Николаевич', 'Фамилия': 'Николаев', 'Оценка': 4}
3
{'Имя': 'Федор', 'Отчество': 'Владимирович', 'Фамилия': 'Иванов', 'Оценка': 3}
{'Имя': 'Владимир', 'Отчество': 'Федорович', 'Фамилия': 'Иванов', 'Оценка': 3}
Обратите внимание, что группировка работает только со смежными объектами. Предварительно отсортируйте данные.