您可以在一个列表中包含从最高到最低的浮点值,同时更改另一个列表吗?

Can you one list containing float values from highest to lowest while simultaneously changing another list?

我有 2 个列表

lst1 = [0.9932, 0.9982, 0.9979, 0.9981, 0.9993, 0.9985, 0.9924, 0.9984, 0.9987, 0.9967, 0.995, 0.9932]

lst2 = ["Jane", "Tylor", "James", "Tom", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson"]

我想创建一个列表,其中包含 3 个元组,然后在其中包含 2 个项目。每个 3 元组中的第二项是 lst1 中按升序排列的浮点值(lst1 中的前 3 个值),元组中的第二项是 lst2 中对应于来自 lst1 的浮点数。 所以基本上我想要

[("Smith", 0.9993),("Brown", 0.9987),(0.9985, "Johnson")]

但是,如果 lst1 中的最大值相同,那么我想按名称排序。 例如:(0.9994, "Abby") 应该在 (0.9994, "Bob")

之前

我试过:

sorted(zip(lst1, lst2), reverse=True)[:3]

这给了我

[(0.9993, "Smith"),(0.9987, "Brown"), (0.9985, "Johnson")]

lst1 项在元组中位于 lst2 项之前。如果我交换 lst1lst2,它仍然不起作用。

改变zip中lst1和lst2的顺序,使用sorted的key参数

lst1 = [0.9932, 0.9982, 0.9979, 0.9981, 0.9993, 0.9985, 0.9924, 0.9984, 0.9987, 0.9967, 0.995, 0.9932]
lst2 = ["Jane", "Tylor", "James", "Tom", "Smith", "Johnson", "Williams", "Jones", "Brown", "Davis", "Miller", "Wilson"]
# sort in descending order by score, alphabetically by name
sorted(zip(lst2, lst1), key=lambda x: (-x[1], x[0]))[:3]
[('Smith', 0.9993), ('Brown', 0.9987), ('Johnson', 0.9985)]