我有一个图元的列表,我需要按其第二元素进行排序,并删除重复的内容。
输入的例子。
("1", "b"), ("2", "e"), ("2", "e"), ("3", "d"), ("3", "c"), ("4", "a"), ("5", "a"),expected output:
("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
似乎不接受自定义的比较lambdas。
有谁知道有什么简单的方法可以做到这一点?