【发布时间】:2021-08-23 04:20:21
【问题描述】:
我有一个元组列表,我需要按它们的第二个元素对其进行排序并删除重复项。
示例输入:
[
("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 容器,或者至少我还没有找到,而且 Python 3 中后来添加的 OrderedDict 似乎不接受自定义比较 lambda。
有没有人知道一个简单的方法来做到这一点?
【问题讨论】:
-
请始终分享输入示例和预期输出,以便我们正确理解问题
-
@azro 示例添加
标签: python set ordereddict