按指定为值的列表中的最高数字对字典中的数据进行排序?python

按指定为值的列表中的最高数字对字典中的数据进行排序?python,python,sorting,nested-lists,Python,Sorting,Nested Lists,在字典形式中,如何引用分配给键的列表中的第一、第二和第三个元素?字典是一个学生的名字,上面有一个列表,上面有他们的分数。如何引用该列表中的每个分数,以便删除较小的分数,然后根据这些分数计算平均值并打印出来。 这本字典看起来像这样 {'Student Example ': [5, 2], 'Student Name ': [2], 'Another Student ': [1]} 虽然我尝试使用的代码看起来像 viewscores = input ("Would you like to

在字典形式中,如何引用分配给键的列表中的第一、第二和第三个元素?字典是一个学生的名字,上面有一个列表,上面有他们的分数。如何引用该列表中的每个分数,以便删除较小的分数,然后根据这些分数计算平均值并打印出来。 这本字典看起来像这样

{'Student Example ': [5, 2], 'Student Name ': [2], 'Another Student ': [1]}
虽然我尝试使用的代码看起来像

    viewscores = input ("Would you like to view the scoreboards? (Yes/No): ")
if viewscores == "Yes":
    classview = int (input ("What class board would you like to view? (1,2 or 3): "))
    print ("Sort class",classn,"scoreboard: ")
    print ("1. Alphabetically by students highscore")
    print ("2. By high score, highest to lowest")
    print ("3. By average score, highest to lowest")
    sorting = int (input("Enter sort type: (1,2 or 3): "))

    if classview == 1:
        if sorting == 1:
            highscores = ((k, classone[k]) for k in sorted(classone, key=classone.get, reverse=True))
            for k, v in highscores:
                listnum = len(v)
                while listnum > 1:
                    if (v[1]) < (v[0]):
                        del (v[1])
                print (v,k)
viewscores=input(“您想查看记分板吗?(是/否):”)
如果viewscores==“是”:
classview=int(输入(“您希望查看哪个类板?(1、2或3):”)
打印(“排序类”,类别N,“记分板:”)
打印(“1.按学生高分字母顺序排列”)
打印(“2.按高分,从高到低”)
打印(“3.按平均分数,从高到低”)
排序=int(输入(“输入排序类型:(1、2或3):”)
如果classview==1:
如果排序==1:
高分=((k,classone[k]),对于排序中的k(classone,key=classone.get,reverse=True))
对于高分的k、v:
listnum=len(v)
当listnum>1时:
如果(v[1])<(v[0]):
del(v[1])
打印(v,k)
我得到一个错误:

Traceback (most recent call last):
  File "C:\Users\emily_000\Desktop\test task 3 part two.py", line 116, in <module>
    if (v[1]) < (v[0]):
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“C:\Users\emily\u 000\Desktop\test task 3第二部分.py”,第116行,在
如果(v[1])<(v[0]):
索引器:列表索引超出范围
我如何引用列表的索引,以便从中找到最高的分数,然后进行排序(按从高到低和字母顺序)。那么,我怎样才能引用它们,从而计算出分数的平均值,并根据这个数字进行组织? 使用python 3.3.4


这是一个学校项目,请您解释一下它是如何工作的,以便我能理解,谢谢您的帮助

关于您的第一个问题:

averagescores = {}
for k, v in highscores.items():
    averagescores[k] = float(sum(v))/float(len(v))
上述代码将平均所有分数,并将其放入名为“averagescores”的新词典中

至于你的第二个问题,字典在默认情况下是无序的。不过,您可以将字典的有序表示形式设置为元组:

import operator
sortedscores = sorted(averagescores.items(), key=operator.itemgetter(1))

这将按值从最小到最大对分数进行排序。

错误在哪一行?你能把问题简化为几行代码吗?我得到一个“回溯(最近一次调用):文件“C:\Users\georg\u 000\Desktop\test task 3 part 2.py”,第116行,在if(v[1])<(v[0]):indexer:list index out range”错误问题是在删除元素时没有更新
listnum
。您最好使用
len(v)
来代替您的循环条件。谢谢您的回复!但是我在使用普通代码时收到了这个错误,为什么会这样?回溯(最近一次调用):文件“C:\Users\georg\u 000\Desktop\test task 3 part two.py”,第121行,平均分数[v]=sum(v)/len(v)TypeError:unhable type:“list”哇!averagescores[v]应该是averagescores[k]。现在更正。更正后,我的代码仍然显示“[5,4]乔治亚·斯蒂尔[2]学生姓名[1]另一个学生”,其中两个列表元素“未平均”,对我来说,“v”比k更有意义,你可以知道为什么这次不起作用吗?你是打印新的
平均分数
dict还是原始的?建议的方法从不修改原始数据,而是创建新数据。averagescores={}highscores=((k,classone[k])对于排序中的k(classone,key=classone.get,reverse=True))对于highscores中的k,v:averagescores[k]=sum(v)/len(v)这是准确的代码