Imen F
Imen F

Reputation: 1

How to sort and remove tuples with same first element and only keeping the first occurrence

Support we have a list of tuples listeT:

ListeT=[('a', 1), ('x',1) , ('b', 1), ('b', 1),  ('a', 2),  ('a',3),  ('c', 6), ('c', 5),('e', 6),  ('d', 7),('b', 2)]` and i want to get the following result:

Result = [('a', 1), ('x',1) , ('b', 1), ('c', 5), ('c', 6), ('e', 6), ('d', 7)]`

1-I want to order this list according to the second element of tuples. 2- I want to remove duplicates and only keep the first occurrence of tuples having the same value of first elements: For instance if have ('a', 1) and (a,2), I want to keep only ('a', 1). For the sorting I used : res=sorted(listT, key=lambda x: x[1], reverse= True) and it worked. But for the duplicates I could't find a good solution: I can remove duplicate elements by converting the the list to a set (set(listeT)) or by using numpy.unique(ListeT, axis=0). However, this only removes the duplicates for all the tuples but I want also to remove the duplicates of tuples having the same first element and only keeping the first occurrence. Thank you.

Upvotes: 0

Views: 958

Answers (1)

Lior Cohen
Lior Cohen

Reputation: 5745

The dict can take care of the uniqueness while feeding it in reversed order. I did not understood if you need the outer sort so you can just replace it with list() if not needed.

sorted(dict(sorted(ListeT, key=lambda x: x[1], reverse= True)).items(), key=lambda x: x[1])

[('a', 1), ('b', 1), ('x', 1), ('c', 5), ('e', 6), ('d', 7)]

Upvotes: 3

Related Questions