Python:如何基于另一个列表对列表进行排序?

2024-03-28 10:08:21 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我试图解决的用例:

我有两个列表:(ld

In [1197]: l
Out[1197]: 
[['Cancer A', 'Ecog 9', 'Fill 6'],
 ['Cancer B', 'Ecog 1', 'Fill 1'],
 ['Cancer A', 'Ecog 0', 'Fill 0']]

In [1198]: d
Out[1198]: [[100], [200], [500]]

这是一个由两部分组成的问题:

  1. 根据值的优先级对l进行排序。例如:CancerEcogFill(在这种情况下key=(0,1,2))。它可以是任何类似EcogCancerFill的东西,所以key=(1,0,2)
  2. 按照上述步骤中l的排序顺序对d进行排序

步骤#1我能够实现,如下所示:

In [1199]: import operator
In [1200]: sorted_l = sorted(l, key=operator.itemgetter(0,1,2))

In [1201]: sorted_l
Out[1200]: 
[['Cancer A', 'Ecog 0', 'Fill 0'],
 ['Cancer A', 'Ecog 9', 'Fill 6'],
 ['Cancer B', 'Ecog 1', 'Fill 1']]

现在,我想按照与sorted_l相同的顺序对d的值进行排序

预期产出:

In [1201]: d
Out[1201]: [[500], [100], [200]]

最好的方法是什么


Tags: keyinimport列表排序顺序情况步骤
1条回答
网友
1楼 · 发布于 2024-03-28 10:08:21

以下是@juanpa.arrivillaga帮助下的解决方案:

In [1272]: import operator
In [1273]: key = operator.itemgetter(0, 1, 2)

# Here param key, lets you sort `l` with your own function.
In [1275]: sorted_l,sorted_d = zip(*sorted(zip(l, d), key=lambda x: key(x[0])))

In [1276]: sorted_l
Out[1276]: 
(['Cancer A', 'Ecog 0', 'Fill 0'],
 ['Cancer A', 'Ecog 9', 'Fill 6'],
 ['Cancer B', 'Ecog 1', 'Fill 1'])

In [1277]: sorted_d
Out[1277]: ([500], [100], [200])

相关问题 更多 >