我有一个元组列表,我需要按它们的第二个元素对其进行排序并删除重复项。
示例输入:
[
("1", "b"),
("2", "e"),
("2", "e"),
("3", "d"),
("3", "c"),
("4", "a"),
("5", "a"),
]
预期输出:
[
("5", "a"),
("4", "a"),
("1", "b"),
("3", "c"),
("3", "d"),
("2", "e"),
]
这个问题的常见答案是
myList = sorted( set(myList), key = lambda x: x[1] )
但这似乎不是最好的方法,因为首先从列表构造一个集合,然后从一个集合构造一个列表(具有随机不同的顺序),然后将排序算法应用于列表。
在其他可以更好地控制容器及其实现的语言中,我会使用有序集来执行此操作,因为该容器将删除重复项并同时对元素进行排序。我想写这样的东西。
myList = list( ordered_set( myList, key = lambda x: x[1] ) )
但在 Python 中,这似乎是一个矫枉过正的任务。Python中没有ordered_set
容器,或者至少我还没有找到,而且OrderedDict
Python 3 中后来添加的容器似乎不接受自定义比较 lambda。
有谁知道一个简单的方法来做到这一点?