在Python中查找列表中的5个最小数字

Mik*_*son -2 python sorting max minimum

我有一个名单列表,x和一个与名称对应的分数列表y.

x = {a,b,c,d,e,f,g,h,i,j,k} 
y= {8,8,15,13,12,17,18,12,14,14} 
Run Code Online (Sandbox Code Playgroud)

所以,a得分为8,b得分为8,c得分为15,......,k得分为14

我想从列表中找到5个最小的分数,y,并得到他们的名字,并打印出类似于以下内容:

前5名得分最低:

a : 8
b : 8 
e : 12
h : 12 
d : 13
Run Code Online (Sandbox Code Playgroud)

目前,我正在创建列表的副本,然后使用pop来减少列表,但是它给了我不正确的分数名称.但是,当我为max5值创建列表时,使用相同的方法一切都很好.我不确定一个允许我在python中执行此操作的函数.这只是我的问题的一个例子,我的真正问题涉及商店位置以及我从一个函数计算的那些商店的分数,但我想获得前5名最高分和5分最低分.有没有人有这个有效的解决方案?

Ana*_*mar 7

Python有一个名为的数据结构Dictionary,可用于存储键/值对.在Python中,字典被定义为 -

dict = {'a':8 , 'b':8, 'c':15, 'd':13 ...}
Run Code Online (Sandbox Code Playgroud)

然后,您可以遍历此字典中的键值对,以查找5个最小的数字.

你可以将dict转换为元组,然后根据第二项对元组进行排序 -

import operator
dict = {'a':8 , 'b':8, 'c':15, 'd':13 ...}
sorted_dict = sorted(dict.items(), key=operator.itemgetter(1))
Run Code Online (Sandbox Code Playgroud)

您也可以使用a list of tuples,而不是使用dict,并使用上面代码中的最后一行根据每个元组的第二个元素对其进行排序.

元组列表看起来像 -

scores = [('a',8),('b',8),('c',15),('d',13)..]
Run Code Online (Sandbox Code Playgroud)