现有一个list为name,另一个为score,需求是按照score来排序,希望得到的结果name和之前的score一一对应,一开始我采用的方法为:
list(map(score.index, heapq.nlargest(top, score)))
这样可以得到由大到小的索引,之后根据索引就可以取到值,但存在一个问题,如果score分数一样,那么map就会丢失另一个name。
改进:使用zip将两个list组合,之后根据list其中的一个元素进行排序即可,代码如下:
zipped = zip(tag, score)
sort = sorted(zipped, key=lambda x: (x[1], x[0]), reverse=True)
之后如果想恢复可以:
result = zip(*sort_zipped)
# 将 sort_zipped 拆分成两个元组,为 [(3,2,1),(4,5,6)]
x_axis, y_axis = [list(x) for x in result]
# 将拆分后的两个元组分别变成 list 列表,为 [3,2,1],[4,5,6]