我有一个包含列表的字典,每个列表具有相同数量的元素。
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原生解决方案优先
最佳答案
使用numpy.lexsort
为此:
res = np.lexsort((to_sort['b'], to_sort['a']))
# array([1, 0, 2], dtype=int64)
请注意此函数的排序顺序相反,即上面的代码首先按 a
排序,然后按 b
排序。
关于python - 在对列表字典进行排序时解决平局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49801377/