[ЗВУК] Как же нам сохранять данные из нашей таблицы? Давайте опять же вспомним, что нам нужно сделать и что вообще происходит. Мы собираем данные обязательно для каких-то регионов. То есть у нас есть какая-то информация, которая ассоциируется с названиями регионов. Более того, мы проходим по строкам таблицы, и для каждой строки, для каждого ученика, мы в первую очередь определяем, из какого он региона, и потом, если нужно, для данного региона обновляем информацию. Это все звучит так, как будто бы нам очень удобно представить название региона в качестве ключа некоторого словаря. Отлично. Значит, мы будем создавать словарь, и ключом такого словаря будет название региона. Давайте я сразу же создам переменную, перед тем, как мы заходим в цикл. Я назову ее regions_statistics, и изначально это пустой словарь. Теперь давайте разберемся, что будет значениями у такого словаря. Вспомним, какие данные нам нужно в итоге получить для каждого региона. Это средний балл учеников из этого региона, общее количество участников олимпиады из этого региона и количество победителей и призеров из этого региона. Для того чтобы нам получить среднее, нам нужно для этого сначала получить все баллы. Давайте будем сохранять баллы просто в отдельный список и в конце, когда мы получим все данные, мы получим с помощью этого списка и средний балл, и количество общее участников. Для этого мы просто воспользуемся функциями для списка sum и length, просто получим сумму, длину этого списка и получим среднее арифметическое и количество таким образом. И кроме того, нам потребуется переменная, целое число, счетчик числа победителей и призеров олимпиады. То есть нам нужно вместе сохранить список чисел и еще одно целое число. Подумаем, как это можно сделать. По идее, их все можно записать в каком-нибудь списке, но для этого нам придется запоминать, что на какое место мы поставили, что под каким индексом лежит. Это может быть неочевидно, мы можем потом забыть и запутаться. Гораздо проще будет сделать вложенный словарь, где под понятными ключами, например, points и winners, будут храниться, соответственно, список баллов учеников и количество победителей и призеров олимпиады. Так и поступим. Давайте сначала научимся инициализировать значения нашего словаря, точнее, добавлять новый регион в нашем словаре. Все это я буду, конечно же, делать внутри нашего условия, потому что если, если это ученик не из того региона и не из 11 класса, нам не нужно его сохранять в словарь. И теперь я буду проверять, если регион еще не входит в наш словарь, то тогда нам нужно добавить туда пару «регион и значение». Я пишу regions_statistics, в квадратных скобочках обращаюсь к нужному названию региона, и теперь создадим наш вложенный словарь. Вначале список из баллов учеников будет просто пустым, а количество победителей и призеров олимпиады будет равно нулю. И давайте посмотрим в самом конце, когда мы уже вышли из цикла, чему будет равен этот словарь. Так, ага, я каждый раз, иногда забываю ставить кавычечки для ключей словаря, а здесь я просто опечаталась, забыла буковку s. Теперь все работает, и мы видим, что вот у нас появился такой словарь, где каждому региону мы сопоставляем вложенный словарь. Мы пока его никак не обновляли, поэтому каждому региону просто соответствует словарь, в котором лежит пустой список баллов и нулевое количество победителей и призеров. И теперь давайте научимся непосредственно обновлять наш словарь. Что нам нужно делать на каждом шаге, когда мы получили какую-то строчку таблицы? Во-первых, нам нужно получить баллы школьника за олимпиаду и добавить их в соответствующий список. Посмотрим на табличку. Вот у нас баллы лежат во второй с правого конца колоночке, давайте я их извлеку, points, не забываем превращать в целое число, видим, что тут только целые числа, int от второй с конца ячейки, то есть обращаемся по индексу −2. И не забываем извлечь содержимое с помощью атрибута text. И теперь в наш словарь для текущего региона с помощью вот такой, двойных квадратных скобочек, я получаю список баллов и с помощью метода append добавляю туда вот это число. Давайте проверим, что это работает. Отлично. Раньше в нашем словаре массивы для баллов школьников были пустыми, а теперь в них действительно лежат какие-то целые числа, и, судя по примерным масштабам, это как раз то, что нам нужно. И нам осталось научиться обновлять информацию о победителях и призерах олимпиады. Для этого у нас крайняя справа колоночка, в которой либо написано «Победитель», либо написано «Призер», либо ничего не написано. Нам надо, чтобы там было написано «Победитель» или «Призер». Беру крайнюю справа колоночку, cells[−1].text, и теперь я говорю, что если информация о дипломе равна «Победитель», ой, я что-то не то открыла, ничего страшного, либо эта информация «Призер», в этом случае мы берем этот счетчик для текущего региона, то есть мы сначала обращаемся к вложенному словарю для нужного региона, а потом обращаемся к этому счетчику по ключу winners. И мы увеличиваем его просто на единичку. Давайте я пока закомментирую этот код, чтобы он нам не мешался, и теперь я вижу, что счетчик победителей и призеров и нас действительно обновляется. Раскомментирую этот код. Отлично, мы научились извлекать и сохранять нужную информацию для нужных регионов. Дело осталось за малым, отсортировать эти регионы в нужном порядке и записать это в результирующий файл-таблицу. [ЗВУК] [ЗВУК]