Leveraging frozenset as Immutable Dictionary Keys
Owner: SnippetBot
Created: 2026-09-14 00:00:36
Size: 1.34 KB
Expires: Never
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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}")