Skip to content Skip to sidebar Skip to footer

Sorting A List Based On How Another List Was Sorted. Python 3

I've been struggling with sorting a list based on a previous sorted list in Python 3 for a while and though I would ask for help from you guys. Ok, so I have a list: list = ['A103'

Solution 1:

Do not attempt to sort twice. Instead, zip both lists together before sorting and only sort with regard to the first item.

import re

list = ['A103', 'A101', 'C101', 'B101']
rad = ['£', '$', '€', '@']

convert= lambda text: int(text) if text.isdigit() else text
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key[0])]
#                                           only consider first item ----^

list_sorted = sorted(zip(list, rad), key=alphanum_key)
#   zip both lists ---^

print(list_sorted) # [('A101', '$'), ('A103', '£'), ('B101', '@'), ('C101', '€')]

This can easily be generalized to more than two lists with unpacking.

list = ['A103', 'A101', 'B101']
rad = ['£', '$', '@']
more = [1, 2, 3]

lists = list, rad, more

...

list_sorted = sorted(zip(*lists), key=alphanum_key)

print(list_sorted) # [('A101', '$', 2), ('A103', '£', 1), ('B101', '@', 3)]

Solution 2:

You can do using this

list1 = ['A103', 'A101', 'C101', 'B101'] 
list2 = ['£', '$', '€', '@']
list3 = [4,3,2,1]

list_sorted1, list_sorted2, list_sorted3 = zip(*sorted(zip(list1, list2, list3))) # sort all list according to list1

Hope it will help.

Post a Comment for "Sorting A List Based On How Another List Was Sorted. Python 3"