libb.unique

unique(iterable, key=None)[source]

Remove duplicate elements while preserving order.

Unlike more_itertools.unique, this preserves the original insertion order rather than returning elements in sorted order. Internally uses more_itertools.unique_everseen(). Returns a list instead of a generator.

Parameters:
  • iterable – Iterable to deduplicate.

  • key – Optional function to compute uniqueness key.

Returns:

List of unique elements.

Return type:

list

Basic Usage:

>>> unique([9,0,2,1,0])
[9, 0, 2, 1]

With Key Function:

>>> unique(['Foo', 'foo', 'bar'], key=lambda s: s.lower())
['Foo', 'bar']

Unhashable Items (use hashing keys for better performance):

>>> unique(([1, 2],[2, 3],[1, 2]), key=tuple)
[[1, 2], [2, 3]]
>>> unique(({1,2,3},{4,5,6},{1,2,3}), key=frozenset)
[{1, 2, 3}, {4, 5, 6}]
>>> unique(({'a':1,'b':2},{'a':3,'b':4},{'a':1,'b':2}), key=lambda x: frozenset(x.items()))
[{'a': 1, 'b': 2}, {'a': 3, 'b': 4}]