Python:对dict的值进行排序,并提取与最后n个值对应的键

时间:2016-11-08 13:45:58

标签: python sorting dictionary

假设您有这样的字典,但不一定按其值排序:

d={a:2,k:2,c:11,f:17,e:84,y:86}

您想要将值从最大到最小排序:

order=sorted(d.values(),reverse=True)

这会给你:

order=[86,84,17,11,2,2]

现在,我们来看看最后两个元素:

b=order[-2:]=[2,2]

检索db中的值对应的密钥的Pythonic方法是什么?在这种情况下,预期的结果将是:

ans=[a,k]

3 个答案:

答案 0 :(得分:8)

key参数用于sorted()

>>> d = {"a":2, "k":2, "c":11, "f":17, "e":84, "y":86}
>>> sorted(d, key=d.get, reverse=True)[-2:]
['a', 'k']

来自docs

  

key 指定用于提取a的一个参数的函数   每个列表元素的比较键:key=str.lower。默认   值为None(直接比较元素)。

答案 1 :(得分:1)

如果您在排序dict后想要键和值,则可以执行以下操作:

>>> from operator import itemgetter
>>> order = sorted(d.items(), key=itemgetter(1), reverse=True)
>>> order[-2:]
[('a', 2), ('k', 2)]

答案 2 :(得分:1)

以下是使用np.argsort另一种方法:

d.values()
# returns [2, 11, 84, 17, 2, 86]

np.argsort(d.values())
# array([0, 4, 1, 3, 2, 5]). 
# Returns the indices that would sort an array.

# Now use it to retrieve the corresponding keys :
for i in np.argsort(d.values())[:2]:
    print d.keys()[i]

<强>结果

'a'
'k'