有人可以向我解释这一行代码的含义吗,请记住我是python的新手。
我必须打印出最好的学生的名字和他的成绩。 d是由学生的姓名和他们各自的平均水平(等级平均)组成的
我知道此代码有效,但我听不懂。
b_p = d.keys()[d.values().index(max(d.values()))]
print '%s %.2f' % (b_p,d[b_p])
我尝试对d和print d.keys()[-1]
进行排序,但
AttributeError:“列表”对象没有属性“键”
。我还必须在姓名旁边打印他的成绩。
答案 0 :(得分:1)
从内向外逐步进行解密:
d.values()
为您提供字典值的列表(在Python 2中)。也就是说,成绩本身。 然后获得最高值:
max(d.values())
然后,在该最大值的值列表中找到索引(位置):
d.values().index(max(d.values()))
该索引适用于值列表,但也适用于键列表。因此,您可以使用该索引来查找与最大值相关的键(学生姓名),并使用该索引对列表(d.keys()
)进行索引:
d.keys()[d.values().index(max(d.values()))]
因此,结果是成绩最高的人的名字。
一个更清晰的变体是将其分成多行:
grades = d.values()
maxgrade = max(grades)
maxindex = grades.index(grades)
names = d.keys()
maxname = names[maxindex]
为什么尝试失败:
我尝试对d进行排序并打印d.keys()[-1],但是[收到错误消息:]
AttributeError: 'list' object has no attribute 'keys'
对词典进行排序时,结果是仅键的排序列表:您丢失了词典信息。因此,在d = sorted(d)
之后,d
现在是list
,并且没有方法,或更一般地说,没有属性keys()
。因此出现错误消息。
有关如何正确执行此操作,请参阅this question。特别是,最清晰的答案是
max(d, key=d.get)
max
函数可以接受一个key
参数,而使用d.get
实际上将使用d.get
返回的值(即值,而不是键)来查找最大。
您可以在sorted
中使用它:
sorted(d, key=d.get)
将列出名称,从低到高排序。
答案 1 :(得分:0)
请注意,sorted(d)
是sorted(d.keys())
的简写,而不是sorted(d.values())
或sorted(d.items())
要按值对键值对进行排序,请尝试:
from operator import itemgetter
best_student = sorted(d.items(), key=itemgetter(1), reverse=True)[0]