这条线是什么意思

时间:2019-05-15 09:23:15

标签: python python-2.7

有人可以向我解释这一行代码的含义吗,请记住我是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:“列表”对象没有属性“键”

。我还必须在姓名旁边打印他的成绩。

2 个答案:

答案 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]