2015-12-13 3 views
2

У меня есть словарь с оценками. Когда я прошу минимальное значение, это дает мне наибольшее значение. Я использовал min(Grades), чтобы найти минимум, но это был я самый крупный, тогда я нашел min(Grades.items(), key=lambda x:x[1]), и это сработало, но я не понимаю, почему min (Grades) не работает. Я также не знаю, как работает 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 'it works –

ответ

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 используется для сравнения порядка элементов вместо исходных значений.

Параметр xlambda - это каждый элемент, переданный функции. ('pr', [17, 15]), ('hw', [16, 27, 25]), ...; Таким образом, вместо элементов кортежа сравниваются два элемента (x[1]) в кортежах.

0

Вы также можете найти key с min значений с помощью dictionary comprehension

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

Выход:

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 
Смежные вопросы