如何在Python中基于另一个列表对一个列表进行排序?

时间:2019-04-04 04:36:38

标签: python python-3.x python-2.7

我有两个单独的列表,一个列表包含列表(list1)列表,另一个列表是简单数值。 list2已排序,但我想基于list2的值对list1进行排序。使用Zip方法会给出错误:无法哈希化的类型。

list1=[[1 ,2],[2,1],[1,3],[1,9],[6,9],[3,5],[6,8],[4,5],[7,9]]
list2=[0.0,1.4142135623730951,1.0,7.0,8.602325267042627, 3.605551275463989,7.810249675906654,4.242640687119285,9.219544457292887]
keydict=dict(zip(list1,list2))//Gives errror: unhashable type

。任何人都可以建议解决方案。

2 个答案:

答案 0 :(得分:3)

您可以使用zip() + sorted()

[x for x, _ in sorted(zip(list1, list2), key=lambda x: x[1])]

代码

list1 = [[1 ,2],[2,1],[1,3],[1,9],[6,9],[3,5],[6,8],[4,5],[7,9]]
list2 = [0.0,1.4142135623730951,1.0,7.0,8.602325267042627, 3.605551275463989,7.810249675906654,4.242640687119285,9.219544457292887]

print([x for x, _ in sorted(zip(list1, list2), key=lambda x: x[1])])
# [[1, 2], [1, 3], [2, 1], [3, 5], [4, 5], [1, 9], [6, 8], [6, 9], [7, 9]]

答案 1 :(得分:1)

使用以下列表理解:

print([list1[list2.index(i)] for i in sorted(list2)])

输出:

[[1, 2], [1, 3], [2, 1], [3, 5], [4, 5], [1, 9], [6, 8], [6, 9], [7, 9]]