Вот ответ Whatangs, если вы хотите получить оба отсортированных списка (python3).
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Zx, Zy = zip(*[(x, y) for x, y in sorted(zip(Y, X))])
print(list(Zx)) # [0, 0, 0, 1, 1, 1, 1, 2, 2]
print(list(Zy)) # ['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']
Просто помните, что Zx и Zy - это кортежи.
Я также брожу, если есть лучший способ сделать это.
Предупреждение: Если запустить его с пустыми списками, он вылетит.