首先,我注意到在元组的排序列表上发布了许多问题,但是在查看了几个帖子之后,我没有看到列表中这种特定格式的任何问题。提前道歉然后提出一个潜在的重复问题,但我认为这应该很简单。
让元组列表为:
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}}
在这个特定的例子中,虽然在我的较大数据集中没有出现,但是第二个字母上的第一个字母的排序没有出现,尽管它在我的较大数据集中出现。
谢谢!
答案 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]))