查找字典值的最大平均值

时间:2014-10-30 14:49:26

标签: python python-2.7

我还在填补空白,我不确定如何回答。 我有一个问题,我需要填写此代码中的空白;空白是[x1][x2]等部分

grades = {"Sam": [85, 90, 95], "Sue": [82, 96, 91], "Ted": [30, 59, 43], "Pat": [72, 75, 78]}

highest = 0

for [x1]:

    exams = grades[student]

    average = 0

    for [x2]:

        average += exam

    average = average / [x3]

    # Make sure that "highest" holds the highest average score.

    if [x4]:

        [x5]

print(highest)

到目前为止,我尝试过的解决方案是:

[x1] = grades in student

[x2] = grade in range(len(student))

[x3] = sum(exams)

我不确定这些是否正确,我不知道该为[x4][x5]尝试什么。

2 个答案:

答案 0 :(得分:0)

所以我相信你的任务是打印出平均分最高的学生;

grades = {"Sam": [85, 90, 95], "Sue": [82, 96, 91], "Ted": [30, 59, 43], "Pat": [72, 75, 78]}

highest = 0

for [x1]:

    exams = grades[student]

    average = 0

    for [x2]:

        average += exam

    average = average / [x3]

    # Make sure that "highest" holds the highest average score.

    if [x4]:

        [x5]

print(highest)

highest显然必须保持最高分,因为它从零开始,我认为你只能改变空白;

grades包含所有信息,因此显然需要迭代,您需要知道dict对象在迭代时的行为方式。

如果你有类似的东西:

myDictionary = {keyObject1: valueObject1, keyObject2: valueObject2, keyObject3: valueObject3}

有几种方法可以迭代这个字典,无论是由默认行为提供,还是通过dict的类方法;

for thing in myDictionary:...将对字典中的每个条目进行迭代,并将thing设置为字典的当前key

for thing in myDictionary.keys():...将执行与上述相同的操作,但更明确一点。它与myDictionary.keys()一样,返回字典的所有key列表,然后像普通列表一样迭代。

for thing in myDictionary.values(),您猜对了,与上面相同,但thing将是字典的当前value

在大多数情况下,另一个选项是最好的,因为它使代码更具可读性和简洁性;对于每个字典条目,for thing in myDictionary.items():...遍历字典设置thingtuple(key, value)。我在每个示例中都使用了thing,但通常您会看到以下内容:

for key in myDictionary:
  pass

for key in myDictionary.keys():
  pass

for value in myDictionary.values():
  pass

for key, value in myDictionary.items():
  pass

最后一个将元组解包为两个值。通常,key / value会被其他更有意义的变量名替换。

因此,对于您的第一个blank,您正在遍历grades字典,其中keys是学生姓名,因此您有[x1]的几个选项;

for student in grades:....

for student in grades.keys():....

这将使student为每个循环保留学生的名字,然后是下一行; exams = grades[student]将包含该学生的考试成绩。

下一部分只是计算每个学生的平均分数,总结所有结果,然后除以结果数。

再次,它只是循环遍历考试结果数组。

查看下面的代码;

myNumbers = [1,2,3,4,5,6]
for myNumber in myNumbers:
  print myNumber

这将打印1 2 3 4 5 6(每次都在新行上)。这是因为for ... in ...:构造遍历您给出的任何内容,将变量设置为等于当前元素。您需要遍历存储在exams数组中的考试结果,然后除以考试结果总数。

目前,您正在迭代range(len(student))len(myArray)完全按照您的想法执行,它只是给您myArray的长度,因此在这种情况下,每个学生都会2range(myNumber)给出一个数组[0, 1, ... myNumber],因此在您的代码中,您将计算平均值为(0 + 1 + 2)/ sum(所有检查结果),它始终为零这里。

您需要总结考试成绩,然后将其除以考试成绩数。

至于最后两个变量,如果当前平均值是最高平均值,则此部分尝试计算出来,因此它应测试当前平均值是否大于highest,然后如果是,则更新highest

希望这应该是完成blanks的其余部分所需的全部内容。

答案 1 :(得分:0)

def get_highest_average(grades):
    return max(sum(scores)/len(scores) for scores in grades.values())

此函数将返回字典grades中的最高平均值。它使用生成器理解来计算每个分数列表的平均值,然后将它们传递给内置的max()以查找返回的最高值。