from collections.abc import Set # Imagine configuration or permissions tied to a set of features # We want to map a specific combination of features to a value. feature_configs = {} # Define feature sets (order doesn't matter for a set) set1 = frozenset(['feature_a', 'feature_b']) set2 = frozenset(['feature_b', 'feature_c']) set3 = frozenset(['feature_a', 'feature_c']) # Use frozensets as dictionary keys feature_configs[set1] = {'level': 'standard', 'price': 10} feature_configs[set2] = {'level': 'premium', 'price': 25} feature_configs[frozenset(['feature_a', 'feature_b', 'feature_c'])] = {'level': 'enterprise', 'price': 100} # Accessing configuration based on a set of features user_features_1 = frozenset(['feature_b', 'feature_a']) # Order doesn't matter print(f"Config for user_features_1: {feature_configs.get(user_features_1)}") user_features_2 = frozenset(['feature_c', 'feature_b']) print(f"Config for user_features_2: {feature_configs.get(user_features_2)}") user_features_3 = frozenset(['feature_d']) # Not in config print(f"Config for user_features_3: {feature_configs.get(user_features_3, 'No specific config')}") # Error: a regular set cannot be used as a dictionary key because it's mutable # try: # my_set = {'item1', 'item2'} # some_dict = {my_set: 'value'} # except TypeError as e: # print(f"Error with mutable set as key: {e}")