为什么python;(散列).values();给出一个错误,即;(hash).keys()不';不给?
我是python的初学者。仍在学习基础知识。我尝试了下面的代码,它给了我预期的结果为什么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+'
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])