pythondictionaryfrozenset

Convert a frozenset to a dictionary in python


I have the following frozenset:

f_set = [frozenset({8, 14, 15, 18}), frozenset({1, 2, 3, 7, 8}), frozenset({0, 4, 5})]

I need to convert f_set into a dictionary as the following

Now, in case some keys are existed in multiple set, assign a new values to them. In this case 8 existed in both set 1 and set 2, so assign a value of 3.

dict1 = {8:3, 14:0, 15:0, 18:0, 1:1, 2:1, 3:1, 7:1, 0:2, 4:2, 5:2}

Note: my actual f_set contains more than three sets, so I'd like to avoid doing that manually.


Solution

  • You can use dict comprehension with enumerate:

    f_set = [frozenset({8, 14, 15, 18}), frozenset({1, 2, 3, 7, 8}), frozenset({0, 4, 5})]
    
    dict1 = {x: i for i, s in enumerate(f_set) for x in s}
    print(dict1)
    # {8: 1, 18: 0, 14: 0, 15: 0, 1: 1, 2: 1, 3: 1, 7: 1, 0: 2, 4: 2, 5: 2}
    

    Note that, if the sets are not mutually disjoint, some keys will be discarded, since a dict cannot have duplicate keys.