Python 在字典中查找最小值

Python 在字典中查找最小值,python,dictionary,Python,Dictionary,我有一本有分数的字典。当我要求最小值时,它给了我最大的值。我用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': [8

我有一本有分数的字典。当我要求最小值时,它给了我最大的值。我用
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])

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

在字典上返回最大的键(按字典顺序)


最小值的含义(Grades.items(),key=lambda x:x[1])

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


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

您还可以使用
字典理解

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

set(['qz'])
试试这个

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
minScore=100
lowInitial=“”
成绩={'pr':[17,15],'hw':[16,27,25],'ex':[83,93],'qz':[8,10,5]}
对于姓名首字母,分数为。items():
最低分数=最低(分数)
如果最低分数<最低分数:
minScore=最低分数
低首字母=首字母
打印(“得分最低的人:”+lowInitial)
打印(“最低分数为:+str(minScore))
得分最低的人是:qz
最低分为:5分

您正在打印具有最小值的词典(在本例中为最小列表)。@falsetru是正确的。在第二种情况下,
min(Grades.items(),key=lambda x:x[1])
您正在比较列表的第一个值它总是返回“ex”作为最小值,但当我将其更改为“ex”以外的值时,它工作了如果您试图在字典中为所有列表找到最小值(即5),则需要迭代每个字典键,然后迭代每个列表。
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