I am sure this question has possibly been asked before but I can't seem to find the correct answer. If I have two lists
_list1 = ["keyName", "test1", "test2"]
_list2 = ["keyName", "test2", "test1"]
I am trying to use _list1 to rearrange elements in _list2 so that they match the order exactly. What's the cleanest way to do that? Desired output:
_list1 = ["keyName", "test1", "test2"]
_list2 = ["keyName", "test1", "test2"]
I am sorry if this is duplicate but so far I am only able to find answers for list of numbers and using zipped sorted() method.
What if the _list2 is a list of lists?
_list2 = [["test1", "test2", "keyName"], ["test2", "test1", "keyName"]]
Desired Output:
_list2 = [["keyName", "test1", "test2"], ["keyName", "test1", "test2"]]
One more what if: What if I wanted to sort any other list of objects using _list1 as a key
_list2 = [[object1, object2, object3], [object1, object2, object3]]
where:
object1.Name = "keyName"
object3.Name = "test1"
object2.Name = "test2"
so effectively I would expect output of:
_list2 = [[object1, object3, objec1], [object1, object3, objec1]]
Is that possible?
You can sort a list in Python using the sort() method. The method accepts two optional arguments: reverse : which sorts the list in the reverse order (descending) if True or in the regular order (ascending) if False (which it is by default)
There will be three distinct ways to sort the nested lists. The first is to use Bubble Sort, the second is to use the sort() method, and the third is to use the sorted() method.
try to use key with sorted:
sorted(_list2,key=_list1.index)
for nested list you can use list comphresnion:
[sorted(x,key=_lis1.index) for x in _list2]
In [84]: _list1 = ["keyName", "test1", "test2"]
In [85]: d = {k:v for v,k in enumerate(_list1)}
In [86]: _list2 = ["keyName", "test2", "test1"]
In [87]: _list2.sort(key=d.get)
In [88]: _list2
Out[88]: ['keyName', 'test1', 'test2']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With