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

时间:2017-01-23 23:06:37

标签: python sorting

首先,我注意到在元组的排序列表上发布了许多问题,但是在查看了几个帖子之后,我没有看到列表中这种特定格式的任何问题。提前道歉然后提出一个潜在的重复问题,但我认为这应该很简单。

让元组列表为:

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)]

请注意,列表中的每个元组由1组成:另一个长度为3且有3个字母的元组,以及2:浮点数。我的排序目标很简单:第一个按浮点数排序元组列表,第二个打破浮点数中的任何关系然后按长度为3元组的第一个字母进行排序,第三个打破该字母中的任何关系按长度为3元组的第二个字母排序。期望的输出将是:

{{1}}

在这个特定的例子中,虽然在我的较大数据集中没有出现,但是第二个字母上的第一个字母的排序没有出现,尽管它在我的较大数据集中出现。

谢谢!

1 个答案:

答案 0 :(得分:4)

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

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]))