The below code has an error in function U=set(p.enum()) which a type error of unhashable type : 'set' actually if you can see the class method enum am returning 'L' which is list of sets and the U in function should be a set so can you please help me to resolve the issue or How can I convert list of sets to set of sets?
class pattern(object): def __init__(self,node,sets,cnt): self.node=node self.sets=sets self.cnt=cnt def enum(self): L=[] if self.cnt==1: L = self.node else: for i in self.sets: L=[] for j in self.node: if i!=j: L.append(set([i])|set([j])) return L #List of sets V=set([1,2,3,4]) U=set() cnt=1 for j in V: p=pattern(V,(U|set([j])),cnt) U=set(p.enum()) #type error Unhashable type:'set' print U cnt+=1
This error occurs when trying to hash a list, which is an unhashable object. For example, using a list as a key in a Python dictionary will cause this error since dictionaries only accept hashable data types as a key. The standard way to solve this issue is to cast a list to a tuple, which is a hashable data type.
The Python "TypeError: unhashable type: 'set'" occurs when we use a set as a key in a dictionary or an element in another set . To solve the error, use a frozenset instead, because set objects are mutable and unhashable.
Slice is not a hashable object, and therefore it cannot be used as a key to a dictionary. To solve this error, specify the appropriate key names for the values you want or use an iterable object like items() and iterate over the items in the dictionary.
We can solve this by adding each array element instead of the array object into the set. This should add all the elements of the array to the set.
The individual items that you put into a set can't be mutable, because if they changed, the effective hash would change and thus the ability to check for inclusion would break down.
Instead, you need to put immutable objects into a set - e.g. frozenset
s.
If you change the return statement from your enum
method to...
return [frozenset(i) for i in L]
...then it should work.
This error is raised because a set can only contain immutable types. Or sets are mutable. However there is the frozenset
type :
In [4]: a, b = {1,2,3}, {2,3,4} In [5]: set([a,b]) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-6ca6d80d679c> in <module>() ----> 1 set([a,b]) TypeError: unhashable type: 'set' In [6]: a, b = frozenset({1,2,3}), frozenset({2,3,4}) In [7]: set([a,b]) Out[7]: {frozenset({1, 2, 3}), frozenset({2, 3, 4})}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With