假设您有这样的字典,但不一定按其值排序:
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]
检索d
中b
中的值对应的密钥的Pythonic方法是什么?在这种情况下,预期的结果将是:
ans=[a,k]
答案 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'