如何在Python中使用另一个列表的值对一个列表进行排序?
我们可以通过将第二个列表设置为按排序顺序排列的第一个列表中的值的索引号来按另一个列表的值对列表进行排序。
使用另一个列表的值对列表进行排序
示例
在本例中,我们将通过另一个列表的值对列表进行排序,即第二个列表将按照它们在排序顺序中放置的顺序具有索引号。
# 两个列表
list1 = ['BMW', 'Toyota', 'Audi', 'Tesla', 'Hyundai']
list2 = [2, 5, 1, 4, 3]
print("List1 = \n",list1)
print("List2 (indexes) = \n",list2)
# 基于List2排序List1
res = [val for (_, val) in sorted(zip(list2, list1), key=lambda x: x[0])]
print("\nSorted List = ",res)
输出
List1 =
['BMW', 'Toyota', 'Audi', 'Tesla', 'Hyundai']
List2 (indexes) =
[2, 5, 1, 4, 3]
Sorted List = ['Audi', 'BMW', 'Hyundai', 'Tesla', 'Toyota']
使用字典从另一个列表中的值对列表进行排序
示例
在本例中,我们将根据另一个列表中的值对列表进行排序。我们将两个列表添加到字典中,然后使用带lambda的字典的键值来排序。
# 两个列表
list1 = ['宝马', '丰田', '奥迪', '特斯拉', '现代']
list2 = [2, 5, 1, 4, 3]
print("列表1 = \n",list1)
print("列表2 (索引) = \n",list2)
# 空字典
newDict = {}
# 空列表
outList = []
# 将两个列表放入字典 newDict
newDict = {list1[i]: list2[i] for i in range(len(list2))}
# 基于键和值使用 sorting() 排序
# 也可以使用 lambda
s = {k: v for k, v in sorted(newDict.items(), key=lambda item: item[1])}
# 向列表添加元素
for i in s.keys():
outList.append(i)
print("\n排序后的列表 = \n",outList)
输出
列表1 =
['宝马', '丰田', '奥迪', '特斯拉', '现代']
列表2 (索引) =
[2, 5, 1, 4, 3]
排序后的列表 =
['奥迪', '宝马', '现代', '特斯拉', '丰田']