# Sort the values of first list using second list in Python

• Difficulty Level : Medium
• Last Updated : 27 Apr, 2022

Given two lists, sort the values of one list using the second list.

Examples:

```Input : list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
list2 = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

Output :['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']

Input : list1 = ["g", "e", "e", "k", "s", "f", "o", "r", "g", "e", "e", "k", "s"]
list2 = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

Output : ['g', 'k', 'r', 'e', 'e', 'g', 's', 'f', 'o']```

Approach :

1. Zip the two lists.
2. Create a new, sorted list based on the zip using sorted().
3. Using a list comprehension extract the first elements of each pair from the sorted, zipped list.

Concept :
The purpose of zip() is to map a similar index of multiple containers so that they can be used just using as a single entity.
Below is the implementation of the above approach:

## Python

 `# Python program to sort``# one list using``# the other list` `def` `sort_list(list1, list2):` `    ``zipped_pairs ``=` `zip``(list2, list1)` `    ``z ``=` `[x ``for` `_, x ``in` `sorted``(zipped_pairs)]``    ` `    ``return` `z``    `  `# driver code``x ``=` `[``"a"``, ``"b"``, ``"c"``, ``"d"``, ``"e"``, ``"f"``, ``"g"``, ``"h"``, ``"i"``]``y ``=` `[ ``0``,   ``1``,   ``1``,    ``0``,   ``1``,   ``2``,   ``2``,   ``0``,   ``1``]` `print``(sort_list(x, y))` `x ``=` `[``"g"``, ``"e"``, ``"e"``, ``"k"``, ``"s"``, ``"f"``, ``"o"``, ``"r"``, ``"g"``, ``"e"``, ``"e"``, ``"k"``, ``"s"``]``y ``=` `[ ``0``,   ``1``,   ``1``,    ``0``,   ``1``,   ``2``,   ``2``,   ``0``,   ``1``]` `print``(sort_list(x, y))`

Output:

```['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']
['g', 'k', 'r', 'e', 'e', 'g', 's', 'f', 'o']```

In the above code, we have two lists, the first list is being sorted with respect to the values of the second list.

`y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]`

Here first the lowest value is checked. Like in this list, 0 is the lowest, so starting from the first index, 0 is the lowest and it is at index 0. So the value of index 0 is stored at index 0 in the first list. Similarly, 0 is again found at index 3 and so the value of index 3 in the first list is index 1. The same goes until the list is not completed.

Approach 2: By using Dictionary, list comprehension, lambda function

## Python3

 `def` `sorting_of_element(list1,list2):``  ` `    ``# initializing blank dictionary``    ``f_1 ``=` `{}``    ` `    ``# initializing blank list``    ``final_list ``=` `[]``    ` `    ``# Addition of two list in one dictionary``    ``f_1 ``=` `{list1[i]: list2[i] ``for` `i ``in` `range``(``len``(list2))}``    ` `    ``# sorting of dictionary based on value``    ``f_lst ``=` `{k: v ``for` `k, v ``in` `sorted``(f_1.items(), key``=``lambda` `item: item[``1``])}``    ` `    ``# Element addition in the list``    ``for` `i ``in` `f_lst.keys():``        ``final_list.append(i)``    ``return` `final_list``        ` `list1 ``=` `[``"a"``, ``"b"``, ``"c"``, ``"d"``, ``"e"``, ``"f"``, ``"g"``, ``"h"``, ``"i"``]``list2 ``=` `[ ``0``,   ``1``,   ``1``,    ``0``,   ``1``,   ``2``,   ``2``,   ``0``,   ``1``]`  `list3``=``sorting_of_element(list1,list2)``print``(list3)`

Output:

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

My Personal Notes arrow_drop_up