从字典中获取价值指数

时间:2016-05-05 10:02:35

标签: python python-2.7 dictionary indices

我有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)

4 个答案:

答案 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)为每个.indexO(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代替rangeizip代替zipitervalues代替values记忆效率。

答案 3 :(得分:0)

最后我忘了将()放在值之后,所以我使用了indices = np.argsort(d.values())