Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python list comprehension, with unique items

Is there a way to make a list comprehension in Python that only contains unique items?

My original idea was to use something like this : new_items = [unicode(item) for item in items]

However, I later realized that I needed to omit duplicate items. So I ended up with this ugly monstrosity :

unique_items = []
for item in items :
    unicode_item = unicode(item)
    if unicode_item not in unique_items :
        unique_items.append(unicode_item)

Now this is far less pretty (and readable) than a simple list comprehension. So, is there a way to make a list comprehension equivalent to the above code?

Also order does matter, so I can't just use a set comprehension.

like image 872
rectangletangle Avatar asked Oct 01 '12 22:10

rectangletangle


2 Answers

Well, there is no ordered set, but we can misuse OrderedDict:

from collections import OrderedDict
t = "never gonna give you up"
OrderedDict.fromkeys(t).keys()

Gives:

['n', 'e', 'v', 'r', ' ', 'g', 'o', 'a', 'i', 'y', 'u', 'p']
like image 180
Michael Avatar answered Oct 31 '22 19:10

Michael


Your original idea works with a set comprehension:

new_items = {unicode(item) for item in items}
like image 33
schryer Avatar answered Oct 31 '22 20:10

schryer