为什么python;(散列).values();给出一个错误,即;(hash).keys()不';不给?

为什么python;(散列).values();给出一个错误,即;(hash).keys()不';不给?,python,Python,我是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+'

我是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:\Practice for Illy\Python\TEST.py”,第8行,在

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

KeyError:“Zack”

“result.txt”文件的内容如下

约翰尼8.65

胡安9.12

约瑟夫8.45

斯泰西7.81

艾登8.05

扎克7.21

亚伦8.31


请向我解释一下,为什么会发生这种错误以及如何修复它?

字典按键查找值,而不是按值查找键。
scores.keys()
返回dict的键,而
scores.values()
返回值。然后,
scores[key]
使用键获取值,因此在本例中,scores字典没有键
Zack
。相反,
Zack
是一个值。

字典按键查找值,而不是按值查找键。
scores.keys()
返回dict的键,而
scores.values()
返回值。然后,
scores[key]
使用键获取值,因此在本例中,scores字典没有键
Zack
。相反,
Zack
是一个值。

当您将
scores.keys()
切换到
scores.values()
时,变量
each
不再像以前那样存储分数(数字)。相反,它存储的名称(字符串)不能在
[]
操作符中用于查找数组中的值

您可能想做的是让循环遍历每个可能的名称,并找到与之相关的分数。但是,为了做到这一点,您不改变循环,而是改变数组

为此,您需要更改的唯一一行是
scores[score]=name
。尝试将其更改为
scores[name]=scores
。现在,它将名称存储为键,分数存储为值。如果你运行下面的代码,你会看到,你不是先有分数再有名字,而是先有名字再有分数,就像我假设你想要的那样。这与您发布的输入文件的格式匹配

result_f=open("results.txt")
scores={}
for line in result_f:
    (name, score)=line.split()
    scores[name]=score
result_f.close()
for each in sorted(scores.keys(), reverse=True):
    print(each+' '+scores[each])

当您将
scores.keys()
切换到
scores.values()
时,变量
each
不再像以前那样存储分数(数字)。相反,它存储的名称(字符串)不能在
[]
操作符中用于查找数组中的值

您可能想做的是让循环遍历每个可能的名称,并找到与之相关的分数。但是,为了做到这一点,您不改变循环,而是改变数组

为此,您需要更改的唯一一行是
scores[score]=name
。尝试将其更改为
scores[name]=scores
。现在,它将名称存储为键,分数存储为值。如果你运行下面的代码,你会看到,你不是先有分数再有名字,而是先有名字再有分数,就像我假设你想要的那样。这与您发布的输入文件的格式匹配

result_f=open("results.txt")
scores={}
for line in result_f:
    (name, score)=line.split()
    scores[name]=score
result_f.close()
for each in sorted(scores.keys(), reverse=True):
    print(each+' '+scores[each])