如何根据python中的列表列表对列表进行排序?

alw*_*btc 1 python sorting list

我有一个清单:

a = ["x", "y", "z"]
Run Code Online (Sandbox Code Playgroud)

我有另一个列表列表:

b = [["y", 99], ["w", 65], ["z", 150]]
Run Code Online (Sandbox Code Playgroud)

所以,我想a按照b降序排列的值对项目进行排序,因此排序a应该如下:

sorted_a = ["z", "y", "x"]
Run Code Online (Sandbox Code Playgroud)

"x"是最后一个,因为它没有值b.

我想知道实现这一目标的最快方法,因为我的真实清单很大.

Moh*_*ohd 5

您可以转换b为字典并使用dict.get()默认值为0的键进行排序,例如:

a = ["x", "y", "z"]
b = [["y", 99], ["w", 65], ["z", 150]]

lowest = float('-inf')
tmp = dict(b)
sorted_a = sorted(a, key=lambda x: tmp.get(x, lowest), reverse=True)
# sorted_a = ["z", "y", "x"]
Run Code Online (Sandbox Code Playgroud)

编辑:

为了避免在具有负数时出现错误结果,我将默认值更改为.get()to ,以-inf使不存在的元素b在排序列表中排在最后.保持tmp.get(x, 0)好像你没有负值b.