@The_Beginer

Как среди записей найти отдельный атрибут и сформировать по нему отдельную коллекцию?

Этот вопрос продолжение вот этого - Как найти номера групп в порядке убывания успеваемости студентов?

Вот есть объекты класса
(Фамилия,Группа,оценки по 3 предметам())

Кирпичин АПР11 3,3,3
Домовая АПР12 4,5,3
Дверной АПР12 4,4,5
Ручкина АПР13 4,5,4
Кафельникова АПР13 0,0,0
Деревянкова АПР13 5,5,5
Брикетский АПР11 5,5,5
Панелин АПР12 5,4,5
Мебелькина АПР11 3,5,3
Сантехников АПР115,3,5


Как сделать,чтобы получилось так и чтобы каждая эта группа со своими значениями стала объектом коллекции?

Кирпичин АПР11 3,3,3
Мебелькина АПР11 3,5,3
Сантехников АПР11 5,3,5
Брикетский АПР11 5,5,5

Панелин АПР12 5,4,5
Домовая АПР12 4,5,3
Дверной АПР12 4,4,5

Кафельникова АПР13 4,4,4
Деревянкова АПР13 5,5,5
Ручкина АПР13 4,5,4


То есть я в будущем хочу чтобы эти АПР11,АПР12,АПР13 как-то занести в коллекцию и уже с помощью цикла и формулы подсчитывать оценки студентов, находящихся в каждой группе.

Что есть уже в наличии:

Список,внутри которого кортеж для хранения.
Правда значения в кортеже неизменяемы вроде,и тут уже вопрос как заполнять его.
listgroup=[(student.numbgroup, 0)]

Функция,которая не до конца реализована(осталось только с группами разобраться)
По поводу огромного количества if прошу не критиковать,он правильно считает количество оценок. Сама переменная sredball также рабочая и протестированная.Функция sorted отдельно также работает.

def sortgroups(self):
          listgroup=[(student.numbgroup, 0)]
          countfour1=0
          countfive1=0
          counttri=0
          for student in studinfos:
                 if student.markgeometry==4:
                      countfour1+=1
                 if student.markalgebra==4:
                      countfour1+=1
                 if student.markinformatika==4:
                      countfour1+=1
                 if student.markgeometry==5:
                      countfive1+=1
                 if student.markalgebra==5:
                      countfive1+=1
                 if student.markinformatika==5:
                      countfive1+=1
                 if student.markgeometry==3:
                      counttri+=1
                 if student.markalgebra==3:
                      counttri+=1
                 if student.markinformatika==3:
                      counttri+=1
          for student in studinfos.numbofgroup[i]:
                  listgroup.append(get_numgroup)
                  sredball=((countfive1+countfour1+counttri)/3)
                  listgroup=[get_numbgroup(),sredball]
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@Wispik
Я сделал бы так (если правильно понял, что нужно):
from itertools import groupby

# students - массив со студентами
students.sort(key=lambda x: x.numbgroup)

res = [{'group': key, 'students': list(data)} for key, data in groupby(students, key=lambda x:x.numbgroup)]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы