对我来说最明显的解决方案是使用key
关键字参数。
>>> X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
>>> Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
>>> keydict = dict(zip(X, Y))
>>> X.sort(key=keydict.get)
>>> X
['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']
请注意,如果您愿意,您可以将其缩短为一行代码:
>>> X.sort(key=dict(zip(X, Y)).get)
正如Wenmin Mu和Jack Peng所指出的,这假设 X
中的值都是不同的。可以通过索引列表轻松处理:
>>> Z = ["A", "A", "C", "C", "C", "F", "G", "H", "I"]
>>> Z_index = list(range(len(Z)))
>>> Z_index.sort(key=keydict.get)
>>> Z = [Z[i] for i in Z_index]
>>> Z
['A', 'C', 'H', 'A', 'C', 'C', 'I', 'F', 'G']
由于从Whatang描述的装饰-排序-去装饰方法更简单且适用于所有情况,因此大多数情况下它可能更好。 (这是一个非常古老的答案!)