首页 > 解决方案 > 根据其他结果对数据进行排名

问题描述

我在下面的代码中有两组链接的数据 - 5 个“网络”和 5 个通过“TT”值的奇异结果。每个 TT 值对应一个网络集(例如 TT1=100 是来自 network1 的结果)。

我的目标是能够根据 TT 结果对 5 个网络进行排名。

network1 = [0,1,0,0,0,0,1,0,0,0,1,1,0,0,1]
network2 = [0,1,0,0,0,0,0,0,1,0,1,1,0,0,1]
network3 = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
network4 = [0,1,0,0,0,0,0,0,0,0,1,1,0,1,1]
network5 = [0,1,1,0,0,0,0,0,0,0,1,1,0,0,1]

networks = [network1, network2, network3, network4, network5]

TT1 = 100
TT2 = 70
TT3 = 80
TT4 = 105
TT5 = 120

TTranks = [TT1,TT2,TT3,TT4,TT5]

s = {x: i for i, x in enumerate(sorted(set(TTranks)))}
ranks = [s[x] for x in TTranks] 
print(ranks) 

此过程的以下结果仅对 TT 值进行排名,尽管我不确定如何链接它以便相应的网络也得到适当的排名。

[2, 0, 1, 3, 4]

也就是说,我希望它将 5 个网络排名为 network2、network3、network1、network4、network5。这将非常有用,因为我希望稍后能够从有序的网络结果中调用。

此外,是否有更有效的方法来完成此过程?

我感谢所有的帮助!!

标签: pythonsortingranking

解决方案


您可以使用/函数的key可选参数根据自定义值进行排序。sortsorted

代码

network1 = [0,1,0,0,0,0,1,0,0,0,1,1,0,0,1]
network2 = [0,1,0,0,0,0,0,0,1,0,1,1,0,0,1]
network3 = [0,1,0,0,0,0,0,1,0,0,1,1,0,0,1]
network4 = [0,1,0,0,0,0,0,0,0,0,1,1,0,1,1]
network5 = [0,1,1,0,0,0,0,0,0,0,1,1,0,0,1]

networks = [network1, network2, network3, network4, network5]

TT1 = 100
TT2 = 70
TT3 = 80
TT4 = 105
TT5 = 120

TT = [TT1, TT2, TT3, TT4, TT5]

sorted_networks_with_indices = sorted(enumerate(networks), key=lambda t: TT[t[0]])

sorted_indices = [i for i,n in sorted_networks_with_indices]
sorted_networks = [n for i,n in sorted_networks_with_indices]

print(sorted_indices)
print(sorted_networks)

输出:

[1, 2, 0, 3, 4]
[[0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1],
 [0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1],
 [0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1],
 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1],
 [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1]]

代码说明

enumerate(networks)列出索引和网络i,n所在的对。这些对使用函数进行排序,用于排序的键是。这是对,索引也是。因此TT 对应于 index-network pair 。insortedlambda t: TT[t[0]]ti,nt[0]iTT[t[0]]t

关于 0-index 的注意事项

中的索引sorted_indices[1, 2, 0, 3, 4]而不是[2, 3, 1, 4, 5]因为 python 列表是 0 索引的,但这对应于 network2、network3、network1、network4、network5。如果您对此不满意,可以将相关行替换为:

sorted_indices = [i+1 for i,n in sorted_networks_with_indices]

参考


推荐阅读