为什么 python "(hash).values()" 会给出一个错误

我是python的初学者。还在学习基础知识。我尝试了下面的代码,它给了我预期的结果。


result_f=open("results.txt")

scores={}

for line in result_f:

    (name, score)=line.split()

    scores[score]=name

result_f.close()

for each in sorted(scores.keys(), reverse=True):

    print(each+' '+scores[each])

但如果我使用


scores.values()

代替


scores.keys()

它会给我这样的错误


" 回溯(最近一次调用最后一次):


文件“E:\Practise for MYSELF\Python\TEST.py”,第 8 行,在


打印(每个+''+分数[每个])


关键错误:'扎克'“


“result.txt”文件的内容是


约翰尼 8.65


胡安 9.12


约瑟夫 8.45


斯泰西 7.81


艾登 8.05


扎克 7.21


亚伦 8.31


请解释一下,为什么会发生该错误以及如何解决?


跃然一笑
浏览 233回答 2
2回答

繁星淼淼

字典按键查找值,而不是按值查找。在scores.keys()返回字典的按键,而scores.values()回报值。然后scores[key]使用键获取值,因此在这种情况下,分数字典没有键Zack。相反,Zack是一个值。

米脂

当您切换scores.keys()到 时scores.values(),现在该变量each不会像以前那样存储分数(数字)。相反,它存储不能在[]运算符内部用于在数组中查找值的名称(字符串)。您可能想要做的是让循环遍历每个可能的名称并找到与之相关的分数。但是,为了做到这一点,您无需更改循环,而是更改了数组。为此,您唯一需要更改的行是scores[score]=name. 尝试将其更改为scores[name]=score. 现在,这会将名称存储为键,并将分数存储为值。如果你运行下面的代码,你会看到不是先有分数然后是名字,你会先有名字,然后是我假设你想要的分数。这与您发布的输入文件的格式相匹配。result_f=open("results.txt")scores={}for line in result_f:    (name, score)=line.split()    scores[name]=scoreresult_f.close()for each in sorted(scores.keys(), reverse=True):    print(each+' '+scores[each])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python