user2242044
user2242044

Reputation: 9243

Dedupe python list based on multiple criteria

I have a list: mylist = [('Item A','CA','10'),('Item B','CT','12'),('Item A','CA','14'),('Item A','NH','10')]

I would like to remove duplicates based on column 1 and 2. So my desired output would be:

[('Item A','CA','10'),('Item B','CT','12'),('Item A','NH','10')]

I'm not really sure how to go about this, so I haven't posted any code, but am just looking for some help :)

Upvotes: 2

Views: 745

Answers (2)

mojo
mojo

Reputation: 4142

Use a dict. The other answer is good. For variety, here's a single expression that will give you the uniq'd list (though the order of elements is not preserved).

{ tuple(item[0:2]):item for item in mylist[::-1] }.values()

This creates a dict from the elements of mylist using elements 0 and 1 as the key (implicitly removing duplicates). Because mylist is iterated in reverse order, the last element with a duplicate key (elements 0 and 1) will remain in the dict.

Upvotes: 1

Brent Washburne
Brent Washburne

Reputation: 13158

Dict keys can be of any hashable type. Create a dict with the first two columns of each item as the key, and only add to unique if those columns haven't been seen before.

unique = {}
for item in mylist:
    if item[0:2] not in unique:
        unique[item[0:2]] = item
print unique.values()

Upvotes: 0

Related Questions