Sort the values of first list using second list in Python

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

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right


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

filter_none

edit
close

play_arrow

link
brightness_4
code

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]
 
 
sorting_of_element(list1,list2)

chevron_right


Output:

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






My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : user_1oei, dharmatejatv