如何按第二个属性对已排序的数组进行排序?

3
假设我有一个元组列表,并通过调用 key = 第一个元素的排序,我们的列表会返回:
[(1, 'e'), (2, 'd'), (3, 'c'), (3, 'a'), (3, 'b'), (4, 'f')]
现在,我如何应用一种仅适用于第一个元素匹配的值的排序(在本例中,具有第一个元素为 3 的三个值),以便最终列表为:
[(1, 'e'), (2, 'd'), (3, 'a'), (3, 'b'), (3, 'c'), (4, 'f')]
我已经对第一个元素应用了排序,但是当我对第二个元素应用排序时,第一个排序就被撤消了。我想保留原始排序,并仅更改具有重复第一个元素的元素。
谢谢!

元组已经按此方式排序:您尝试过 sorted([(1,'e'),(2,'d'),(3,'c'),(3,'a'),(3,'b'),(4,'f')]) 吗? - chepner
从元组中的两个值构建一个键。 - LhasaDad
1个回答

1
Python中默认的.sort()方法已经实现了这一点。例如,以下代码:
L = [(1, 'e'), (2, 'd'), (3, 'c'), (3, 'a'), (3, 'b'), (4, 'f')]
L.sort()

print(L)

返回[(1, 'e'), (2, 'd'), (3, 'a'), (3, 'b'), (3, 'c'), (4, 'f')],这正是您所需要的。


有趣!我记得以前在一个问题上使用过这种方法,但似乎没有起作用。我一定是搞错了什么。由于你的答案最先出现,我会选择你的解决方案。谢谢! - Ebenezer
我不确定在所有情况下都能依赖这个工作。 - LhasaDad
2
@LhasaDad 在Python中,元组和列表按字典顺序进行比较(尽管是按项进行比较,而不是像字符串那样按字符进行比较)。在所有情况下,唯一的例外是如果您有一个无法比较的值,或者您想要一个非默认排序。 - Amadan
我本以为它会强制使用__str__或__repr__,不过现在知道了。 - LhasaDad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接