Группировка по ключу

Инструмент 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}

Обратите внимание, что группировка работает только со смежными объектами. Предварительно отсортируйте данные.