Как вычислить среднее значение конкретных целых чисел кортежа в словаре? - PullRequest
0 голосов
/ 13 октября 2019

У меня есть словарь в форме:

students = {student_1: {'Assignments': [('Assignment_1', 3),
                                        ('Assignment_2', 4),
                                        ('Assignment_3', 2),
                                        ('Assignment_4', 4)],
                        'first_name': 'Alex',
                        'id': 1009,
                        'last_name': 'Robertson'},
            student_2: {'Assignments': [('Assignment_1', 2),
                                        ('Assignment_2', 1),
                                        ('Assignment_3', 2),
                                        ('Assignment_4', 4)],
                        'first_name': 'Dave',
                        'id': 2009,
                        'last_name': 'Robertson'},
            student_3: {'Assignments': [('Assignment_1', 4),
                                        ('Assignment_2', 4),
                                        ('Assignment_3', 4),
                                        ('Assignment_4', 0)],
                        'first_name': 'Carter',
                         'id': 3109,
                         'last_name': 'Smith'}}

И мне нужно создать функцию, которая получает средний балл за все "Assignments". Например, в ("Assignment_1", 4), 4 - это оценка присваивания. Как выбрать только эти значения для расчета?

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Вы можете получить список баллов для каждого учащегося в словаре students, используя то, что называется понимание списка . Вычислить среднее из этого должно быть довольно легко.

for student in students.values():
    scores = [score for (assignment, score) in student['Assignments']]
    average = ...
0 голосов
/ 13 октября 2019

Вот один из подходов к решению этой проблемы в Python 3. Используйте functools.reduce:

from functools import reduce

# Assuming you have a dictionary students
students = {'student_1': {'Assignments': [('Assignment_1', 3),
                             ('Assignment_2', 4),
                             ('Assignment_3', 2),
                             ('Assignment_4', 4)],
                          'first_name': 'Alex',
                          'id': 1009,
                          'last_name': 'Robertson'},
            'student_2': {'Assignments': [('Assignment_1', 2),
                             ('Assignment_2', 1),
                             ('Assignment_3', 2),
                             ('Assignment_4', 4)],
                          'first_name': 'Dave',
                          'id': 2009,
                          'last_name': 'Robertson'}}

# Iterate over dictionary's values
for v in students.values():
    # lambda to calculate average - just a helper
    l = lambda lst: reduce(lambda a, b: a + b, lst) / len(lst)

    # Comprehend the values from tuples in dictionary
    # - you know the values are at index 1 of the tuple
    values = [i[1] for i in v[list(v.keys())[0]]]

    # Calculate the average for extracted values
    average = l(values)

    # Round to second digit
    r = round(average, 2)
    # Output the result
    print("Average {}".format(r))

Вы можете изменить его для более точного соответствия вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...