Consider a sequence of sets:
>>> [{n, 2*n} for n in range(5)]
[{0}, {1, 2}, {2, 4}, {3, 6}, {8, 4}]
Passing them directly into the union method yields the correct result:
>>> set().union({0}, {1, 2}, {2, 4}, {3, 6}, {8, 4})
{0, 1, 2, 3, 4, 6, 8}
But passing them as a list or generator expression results in a TypeError:
>>> set().union( [{n, 2*n} for n in range(5)] )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
>>> set().union({n, 2*n} for n in range(5))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'
Why does it happen and what are some solutions?
The reason for this error is that
set.union()
expects one or more sets (ieset.union(oneset, anotherset, andathirdone)
), not alist
nor generator.The solution is to unpack your list or generator: