Отдельный вывод для каждой итерации

#python #string #dictionary

Вопрос:

 def calculate_average_grade(grades_dictionary):
        grades_avg = {}
        for key in grades_dictionary.keys():
                average = sum(grades_dictionary[key]) / len(grades_dictionary[key])
                grades_avg[key] = average
        return grades_avg
grades_dictionary = readGrade
avg_grade = calculate_average_grade(grades_dictionary)
print(f' {readGrade} => {avg_grade}')
 

Мне нужен этот код для печати вывода отдельно, например {"XYZ": [3,2,4,5]} ==> {"XYZ": 3.5}

Мой код выводится вместе, как-

 {'PQR': [4.0, 4.0, 4.5, 2.5, 4.5, 3.5], 'LMN': [4.0, 4.0, 3.0, 3.0, 3.0, 3.5]}) => {'PQR': 3.8333333333333335, 'LMN': 3.4166666666666665}
 

Комментарии:

1. Это должно включать ввод grades_dictionary в блоке кода. Вы ищете что-то похожее на for name в avg_grade: print (имя, градация[имя], avg_grade[имя])

Ответ №1:

Я бы перестроил ваш код. Создайте функцию, которая вычисляет средние значения, и запустите ее в цикле, который выводит средние значения. Альтернативой было бы превратить вашу функцию в генератор и запустить ее в цикле, но это просто сделало бы ее излишне сложной.

Что-то вроде этого должно сработать:

 def calculate_average_grade(grades):
    return sum(grades) / len(grades)

for key, grades in readGrade.items():
    print(f'{{{key!r}: {grades}}} => {{{key!r}: {calculate_average_grade(grades)}}}')
 

Когда у вас есть строка f, фигурные скобки, которые вы хотите напечатать, буквально должны быть удалены путем их удвоения. Если вам нужны кавычки вокруг строки в формате, распечатайте ее , используя repr вместо str , с помощью !r спецификатора.

С помощью этой формулировки вы сохраняете форматирование и вычисления отдельно в своем коде, делая, по крайней мере, последнее повторно используемым, поскольку оно не привязано к определенному формату данных.

Комментарии:

1. Хорошо. Это может быть более читаемым с помощью для ключа, оценки в readGrade.items() Это также позволяет избежать функции calculate_average_grade, которая должна знать о другой структуре данных, если вы просто передадите ее итеративно.

2. @КенниОстром. Это скорее иллюстрация образа мышления, чем «наилучший подход». Это всегда упражнение для читателя, чтобы понять, как использовать данную информацию. В некоторых случаях может быть лучше иметь более общее среднее значение, которое работает с последовательностью, в других случаях может потребоваться дополнительная информация о данных. Я думаю, что в вашем предложении есть значительная заслуга

3. Да, я сказал, что мне это нравится. Теперь практикуйтесь в том, что вы проповедуете: создайте функцию, которая вычисляет средние значения. Для этого не нужен словарь или ключ, потому что у вас уже есть только оценки.

4. @КенниОстром. Я сделал