为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

跃然一笑 2021-09-14 20:20:26
我是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是一个值。


查看完整回答
反对 回复 2021-09-14
?
米脂

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])


查看完整回答
反对 回复 2021-09-14
  • 2 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信