gpt4 book ai didi

Python - 基于多个排序项的元组排序列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:16 25 4
gpt4 key购买 nike

首先,我注意到有很多关于元组排序列表的问题,但是在查看了几篇文章后,我没有看到任何关于列表这种特定格式的问题。提前为可能重复的问题道歉,但我认为这应该很简单。

让元组列表是这样的:

my_list = [(('G', 'J', 'I'), 1.0), (('E', 'H', 'F'), 1.0), (('F', 'H', 'G'), 0.8889), (('I', 'K', 'J'), 0.8889), (('H', 'I', 'G'), 0.8889), (('H', 'J', 'I'), 0.875)]

请注意,列表中的每个元组都包含 1:另一个长度为 3 且具有 3 个字母的元组,以及 2:一个 float 。那么我的排序目标很简单:第 1 次按 float 对元组列表进行排序,第 2 次按长度为 3 的元组中的第一个字母排序打破 float 中的任何关系,第 3 次打破该字母中的任何关系按长度为 3 的元组中的第二个字母排序。所需的输出将是:

sorted_list = [(('E', 'H', 'F'), 1.0), (('G', 'J', 'I'), 1.0), (('F', 'H', 'G'), 0.8889),  (('H', 'I', 'G'), 0.8889), (('I', 'K', 'J'), 0.8889), (('H', 'J', 'I'), 0.875)]

在这个特定的例子中,没有出现对第二个字母进行排序以打破第一个字母的关系,尽管它在我的更大的数据集中出现了。

谢谢!

最佳答案

这是一种方法:第一种排序是在 float 上反向完成的,而通过对内部元组进行排序来打破联系:

srt_lst = sorted(my_list, key=lambda (x, y): (-y, x)) #python 2
print(srt_lst)
# [(('E', 'H', 'F'), 1.0), (('G', 'J', 'I'), 1.0), (('F', 'H', 'G'), 0.8889), (('H', 'I', 'G'), 0.8889), (('I', 'K', 'J'), 0.8889), (('H', 'J', 'I'), 0.875)]

在 Python 3 中,您必须索引 lambda 的单个参数以访问项目并使用它们进行排序:

srt_lst = sorted(my_list, key=lambda tup: (-tup[1], tup[0]))

关于Python - 基于多个排序项的元组排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41817306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com