以下是我要解决的用例:
我有两个列表的列表:(
现在,我想要按照与
预期输出:
我有两个列表的列表:(
l
和d
)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]]
这是一个由两部分构成的问题:
- 根据值的优先级对
l
进行排序。例如:Cancer
,Ecog
和Fill
(在本例中为key=(0,1,2)
)。它可以是任何东西,比如Ecog
,Cancer
,Fill
,那么key=(1,0,2)
。 - 以与在上一步中对
l
进行排序的顺序相同的方式对d
进行排序。
我能够完成第一步,代码参考以下:
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]]
怎样做是最佳的方式?
sorted(zip(l, d), key=lambda pair: (pair[0][0], pair[0][1], pair[0][2]))
。请注意,正如我上面提到的,你的键函数没有做任何有用的事情,所以在这种特定情况下,你只需执行sorted(zip(l, d), key=itemgetter(1))
。 - juanpa.arrivillagal_sorted, d_sorted = map(list, zip(*sorted(zip(l, d), key=lambda x: x[0])))
。我错过了什么吗? - juanpa.arrivillagal
进行排序? - juanpa.arrivillaga