我有OrderedDict
:
from collections import OrderedDict
d = OrderedDict([('r', 1), ('s', 5), ('a', 3), ('n', 7), ('y', 2)])
我想根据值范围获取字典值的索引。例如,字典d
的索引应该是数组(或np.array
),如下所示:
indices
array([ 0, 3, 2, 4, 1 ], dtype=int64)
index 4
是字典中的最大值,索引0
是最小值
我试过了:
indices = np.argsort(d.values)
答案 0 :(得分:2)
您可以使用列表推导来实现此目的:
$(document).ready(function() {
$(document).on("mouseover",".myClass",function() {
var element = $(this),
currentSrc = $(this).attr('src');
element.attr('src', currentSrc + 'something');
});
});
答案 1 :(得分:2)
因为您已尝试使用argsort:
np.argsort(d.values()).argsort()
Out[50]: array([0, 3, 2, 4, 1], dtype=int64)
所以argsort实际上并没有返回它们的命令,而是返回了对该数组进行排序的索引。在该结果上调用argsort可以实现您想要的效果。
答案 2 :(得分:0)
另一个答案很简单,但O(n^2)
为每个.index
为O(n)
。您可以预先计算字典中的索引,以便索引查找为O(1)
,因为排序是最昂贵的部分,所以整个事件O(nlogn)
。如果d
足够大,这将是非常的重要区别。
>>> from itertools import izip
>>> indices = dict(izip(sorted_values, xrange(len(d))))
>>> indices
{1: 0, 2: 1, 3: 2, 5: 3, 7: 4}
>>> [indices[v] for v in d.itervalues()]
[0, 3, 2, 4, 1]
此处我使用xrange
代替range
,izip
代替zip
,itervalues
代替values
记忆效率。
答案 3 :(得分:0)
最后我忘了将()
放在值之后,所以我使用了indices = np.argsort(d.values())