python - 在对列表字典进行排序时解决平局

标签 python sorting numpy dictionary

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

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/

相关文章:

python - 当日期不唯一时,在 Pandas 中按日期分组后计算观察结果

Python:根据其他两列的值有条件地创建新列

python - 一维时间序列数据的 Durbin-Watson 统计量

python - pyspark 使用 partitionby 对数据进行分区

java - Python属性错误 'Map'对象没有属性 'cells'

c - 在 C 中对二维数组的行进行排序

javascript - 按值对数组的复杂数组进行排序

python - 在奇数和偶数隔离列表中对奇数和偶数进行排序/分组

python - 展开角度以具有连续相位

python - 折叠键上的字典