2015-12-13 128 views
2

我有一个带有等级的字典。当我要求最小值时,它给了我最大的价值。我用min(Grades)找到最低限度,但它是我最大的,然后我发现min(Grades.items(), key=lambda x:x[1]),它的工作,但我不明白为什么最低(成绩)不起作用。我也不知道min(Grades.items(), key=lambda x: x[1])是如何工作的,以及它的意思。查找字典中的最小值

>>> Grades 
{'pr': [17, 15], 'hw': [16, 27, 25], 'ex': [83, 93], 'qz': [8, 10, 5]} 
>>> min(Grades) 
'ex' 
>>> min(Grades.items(), key=lambda x: x[1]) 
('qz', [8, 10, 5]) 
+0

您正在打印具有最小值的字典(本例中为最小列表)。 – Maroun

+0

@falsetru是对的。在第二种情况下'min(Grades.items(),key = lambda x:x [1])'你正在比较列表 –

+0

的第一个值,它总是返回'ex'作为最小值,但是当我将它改为' ex'它的工作原理 –

回答

2

迭代字典会生成键,而不是(键,值)对。

>>> d = {'pr': [17, 15], 'hw': [16, 27, 25], 'ex': [83, 93], 'qz': [8, 10, 5]} 
>>> list(d) 
['pr', 'qz', 'hw', 'ex'] 

>>> min(_) 
'ex' 

词典中min返回是最大的(字典序)的关键。


min(Grades.items(), key=lambda x: x[1])

min含义接受可选key参数。 key函数的返回值用于比较项目的顺序,而不是原始值。

lambda的参数x是传递给函数的每个项目。 ('pr', [17, 15])('hw', [16, 27, 25]),...;因此元组中的第二项(x[1])被比较而不是元组。

0

您也可以使用dictionary comprehension

d = {k for k,v in grades.items() if v == min(grades.values())} 

输出找到keymin值:

set(['qz']) 
0

试试这个。

minScore = 100 
lowInitial = "" 
grades = {'pr': [17, 15], 'hw': [16, 27, 25], 'ex': [83, 93], 'qz': [8, 10, 5]} 
for initials, scores in grades.items(): 
    lowestScore = min(scores) 
    if lowestScore < minScore: 
     minScore = lowestScore 
     lowInitial = initials 
print("Person with lowest score is: " + lowInitial) 
print("Lowest score was: " + str(minScore)) 

Person with lowest score is: qz 
Lowest score was: 5