问题
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?
回答1:
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']
回答2:
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]
来源:https://stackoverflow.com/questions/27725703/rearranging-list-based-on-order-of-another-list