Rearranging list based on order of another list

强颜欢笑 提交于 2020-01-11 06:08:50

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!