Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
502 views
in Technique[技术] by (71.8m points)

python - Rearranging list based on order of another list

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...