Sort python list based on substring in separate list

Question:

I have 2 lists..

list_a = ['Grapes/testfile.csv','Apples/testfile.csv','Pears/testfile.csv','Pears/testfile2.csv']
ref_list = ['Pears','Grapes','Apples']

I need to use ref_list list to order list_a.

More context, list_a will always have the string from ref_list before the / but the length of ref_list will never match that of list_a.. Also I dont want to order reverse alphabetically.

Expected Output:

ordered_list = ['Pears/testfile.csv','Pears/testfile2.csv','Grapes/testfile.csv','Apples/testfile.csv']

I’ve tried many variations, referencing SO but I cant get this to work.. I just cant work out a way to reference the first list here is my attempt which obviously doesn’t work as its not referencing ref_list but my logic is to use string method startswith()

Something like:?

ordered_list = sorted(list_a, key = lambda x: x.startswith())
Asked By: James Cook

||

Answers:

Use split() to extract the word before /.

Then use index() to get the position of the starting word in ref_list, and use that for the sorting key.

ordered_list = sorted(list_a, key = lambda x: ref_list.index(x.split('/')[0]))
Answered By: Barmar

This answer may not be the most elegant, but it works:

sorted_list = list()

for key in ref_list:
      
   sorted_list += [sorted_value for sorted_value in list_a if 

   sorted_value.startswith(key)]
Answered By: SamuelC00
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.