【问题标题】:How to compute the average of specific tuple integers within a dictionary?如何计算字典中特定元组整数的平均值?
【发布时间】:2019-10-12 22:49:11
【问题描述】:

我有一本字典,格式为:

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 是分配分数。如何仅选择这些值进行计算?

【问题讨论】:

  • 您似乎可以从列表中的元组中删除“Assignment_n”,因为已经保留了顺序。然后你可以用students[student_id]["Assignments"][assignment_number]查看分数
  • 你能edit你的问题提供代码或解释你认为算法应该如何工作吗?

标签: python list dictionary tuples


【解决方案1】:

您可以使用称为list comprehension 的方式在students 字典中获取每个学生的分数列表。从中计算平均值应该相当容易。

for student in students.values():
    scores = [score for (assignment, score) in student['Assignments']]
    average = ...

【讨论】:

    【解决方案2】:

    这是在 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))
    

    您可以进一步修改它以更符合您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多