我是python的初学者。还在学习基础知识。我尝试了下面的代码,它给了我预期的结果。result_f=open("results.txt")scores={}for line in result_f: (name, score)=line.split() scores[score]=nameresult_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请解释一下,为什么会发生该错误以及如何解决?
2 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
字典按键查找值,而不是按值查找。在scores.keys()
返回字典的按键,而scores.values()
回报值。然后scores[key]
使用键获取值,因此在这种情况下,分数字典没有键Zack
。相反,Zack
是一个值。
米脂
TA贡献1836条经验 获得超3个赞
当您切换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]=score
result_f.close()
for each in sorted(scores.keys(), reverse=True):
print(each+' '+scores[each])
添加回答
举报
0/150
提交
取消