根据另一个列表的顺序重新排列列表

时间:2014-12-31 19:44:41

标签: python list sorting

我确信之前可能已经提出过这个问题,但我似乎无法找到正确的答案。如果我有两个列表

_list1 = ["keyName", "test1", "test2"]
_list2 = ["keyName", "test2", "test1"]

我正在尝试使用_list1重新排列_list2中的元素,以便它们完全匹配顺序。最干净的方法是什么?期望的输出:

_list1 = ["keyName", "test1", "test2"]
_list2 = ["keyName", "test1", "test2"]

如果这是重复的话我很抱歉但到目前为止我只能找到数字列表的答案并使用zipped sorted()方法。

如果_list2是列表列表怎么办?

_list2 = [["test1", "test2", "keyName"], ["test2", "test1", "keyName"]]

期望的输出:

_list2 = [["keyName", "test1", "test2"], ["keyName", "test1", "test2"]]

如果还有以下内容:如果我想使用_list1作为键对任何其他对象列表进行排序,该怎么办

_list2 = [[object1, object2, object3], [object1, object2, object3]]

其中:

object1.Name = "keyName"
object3.Name = "test1"
object2.Name = "test2"

如此有效我希望输出:

_list2 = [[object1, object3, objec1], [object1, object3, objec1]]

这可能吗?

2 个答案:

答案 0 :(得分:8)

尝试使用带有排序的键:

sorted(_list2,key=_list1.index)

对于嵌套列表,您可以使用list comphresnion:

[sorted(x,key=_lis1.index) for x in _list2]

答案 1 :(得分:3)

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']