## Question

Asked By – Legend

I have a list of strings like this:

```
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1 ]
```

What is the shortest way of sorting X using values from Y to get the following output?

```
["a", "d", "h", "b", "c", "e", "i", "f", "g"]
```

The order of the elements having the same “key” does not matter. I can resort to the use of `for`

constructs but I am curious if there is a shorter way. Any suggestions?

**Now we will see solution for issue: Sorting list based on values from another list **

## Answer

**Shortest Code**

```
[x for _, x in sorted(zip(Y, X))]
```

**Example:**

```
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Z = [x for _,x in sorted(zip(Y,X))]
print(Z) # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]
```

**Generally Speaking**

```
[x for _, x in sorted(zip(Y, X), key=lambda pair: pair[0])]
```

**Explained:**

`zip`

the two`list`

s.- create a new, sorted
`list`

based on the`zip`

using`sorted()`

. - using a list comprehension
*extract*the first elements of each pair from the sorted, zipped`list`

.

*For more information on how to set\use the key parameter as well as the sorted function in general, take a look at this.*

This question is answered By – Whatang

**This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 **