PYTHON从文本文件中排序字典

时间:2016-04-24 19:53:50

标签: python arrays sorting dictionary

我正在尝试对字典进行排序,"最高"和"平均"从最高到最低,但我无法从文本文件中获取字典。我不确定我是否应该使用数组,或者是否有解决方法?

这是我的代码:

import random 
score = 0 
print("Hello and welcome to the maths quiz!") 
while True: 
    position  = input("Are you a pupil or a teacher?: ").lower() 
    if position  not in ("teacher","pupil"): 
        print ("Please enter 'teacher' or 'pupil'!") 
        continue 
    else:
        break 

if position  == 'pupil':

your_name = ""
while your_name == "":
    your_name = input("Please enter your name:")  # asks the user for their name and then stores it in the variable name

class_no = ""
while class_no not in ["1", "2", "3"]:
    class_no = input("Please enter your class - 1, 2 or 3:")  # Asks the user for an input

score = 0

for _ in range(10):
    number1 = random.randint(1, 11)
    number2 = random.randint(1, 11)
    operator = random.choice("*-+")
    question = ("{0} {1} {2}".format(number1,operator,number2))

    solution = eval(question)

    answer = input(question+" = ")

    if answer == str(solution):
        score += 1
        print("Correct! Your score is, ", score , )

    else:
        print("Your answer is not correct")

class_no = ("Class " + class_no + ".txt")

print("Congratulations {0}, you have finished your ten questions!".format(your_name))
if score > 5:
    print("Your total score is {0} which is over half.".format(score))
else:
    print("Better luck next time {0}, your score is {1} which is lower than half".format(your_name, score))

with open(class_no, "a") as Student_Class:
    Student_Class.write(your_name) 
    Student_Class.write(",") 
    Student_Class.write(str(score)) 
    Student_Class.write("\n") 
else:
    while True: 
    Group = input("Which class would you like to view first? 1, 2 or 3?: ") 
    if Group not in ("1", "2", "3"):
        print ("That's not a class!")
        continue
    else:
        break

Group = ("Class " + Group + ".txt")

while True:
    teacherAction = input("How would you like to sort the results? 'alphabetical', 'highest' or 'average'?: ").lower() # Asks the user how they would like to sort the data. Converts answer into lower case to compare easily.
    if teacherAction not in ("alphabetical","highest","average"):
        print ("Make sure you only input one of the three choices!")
        continue
    else:
        break 


with open (Group, "r+") as scores: 
    PupilAnswer = {}
    for line in scores:
        column = line.rstrip('\n').split(',')
        name = column[0]
        score = column[1]

        score = int(score)

        if name not in PupilAnswer:
            PupilAnswer[name] = []
        PupilAnswer[name].append(score)
        if len(PupilAnswer[name]) > 3:
            PupilAnswer[name].pop(0)

if teacherAction == 'alphabetical': 
    for key in sorted(PupilAnswer): 
        print(key, PupilAnswer[key]) 

elif teacherAction == 'highest': 
    highest = {} 
    for key, value in PupilAnswer.items(): 
        maximum = max(value) 
        highest[key] = maximum               
    for key in sorted(highest, key=highest.get, reverse=True): 
      print (key, highest[key]) 

else: 
    for name in sorted(PupilAnswer): 
        average = [] 
        for key in (PupilAnswer[name]): 
            average.append(key) 

        length = len(average)
        total = 0 

        for key in (average): 
            total = total + (key) 
        totalAverage = (total)/length 

        print (name, totalAverage) 

print ("Thank you for using the quiz!") 
input("Press 'enter' to exit!") 

1 个答案:

答案 0 :(得分:0)

词典中没有“排序”。它们是键值项的。取消订购。
您可以使用OrderedDict