排序列表字典时解决平局

00__00__00

我有一本包含列表的字典,每个列表具有相同数量的元素。

to_sort={'a':np.array([1,1,3]),'b':np.array([5,4,5])}

我想添加一个新键“ rank”,其中包含根据“ a”排序的字典的索引,如果是平局,则根据“ b”包含索引。我可以:

to_sort['a'].argsort() 

并获得排序索引。但是,在示例中出现平局的情况下,我将得到:

np.array([1,3,3]).argsort()
Out[17]: array([0, 1, 2], dtype=int64)

现在,我想使用'b'的值对这些排序索引进行排名。例如期望的输出->[1,0,2]而不是[0,1,2]首选Python本机解决方案

pp

使用numpy.lexsort此:

res = np.lexsort((to_sort['b'], to_sort['a']))

# array([1, 0, 2], dtype=int64)

请注意,此函数的排序顺序相反,即上面的代码首先按排序a,然后按排序b

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章