A grouped dictionary differently
2024
The two approaches you’ve described handle creating and populating a grouped dictionary differently. Let’s break them down:
1. grouped = defaultdict(list)
defaultdict
is a subclass of Python’sdict
that provides a default value for a key if it doesn’t exist.- Here,
list
is passed todefaultdictThis means that
any new key will automatically initialize with an empty list.
Example with grouped[sorted_value].append(key)
:
from collections import defaultdict
grouped = defaultdict(list) # Default value for new keys is an empty list.
data = [("cat", "tac"), ("bat", "tab"), ("rat", "tar")]
for key, value in data:
sorted_value = "".join(sorted(value))
grouped[sorted_value].append(key) # Appends the key to the list of values.
print(grouped)
# Output: {'act': ['cat'], 'abt': ['bat'], 'art': ['rat']}
Use Case: This is great when you want multiple keys to map to the same “group” (e.g., anagrams) and store all these keys in a list.
2. grouped = {}
- A plain dictionary is used, and no default values are provided. You must check if a key exists before appending.
Example with grouped[sorted_value] = key
:
grouped = {}
data = [("cat", "tac"), ("bat", "tab"), ("rat", "tar")]
for key, value in data:
sorted_value = "".join(sorted(value))
grouped[sorted_value] = key # Overwrites any previous value.
print(grouped)
# Output: {'act': 'cat', 'abt': 'bat', 'art': 'rat'}
- Behavior:
- In this case, each
sorted_value
maps to only onekey
. Ifsorted_value
is repeated, the lastkey
will overwrite the previous value. - This approach is suitable when each key-value pair in the dictionary must be unique.
- In this case, each
Example with grouped[sorted_value].append(key)
(without defaultdict
):
grouped = {}
data = [("cat", "tac"), ("bat", "tab"), ("rat", "tar")]
for key, value in data:
sorted_value = "".join(sorted(value))
if sorted_value not in grouped:
grouped[sorted_value] = [] # Initialize an empty list for new keys.
grouped[sorted_value].append(key)
print(grouped)
# Output: {'act': ['cat'], 'abt': ['bat'], 'art': ['rat']}
Behaviour: Without defaultdict
, you must explicitly check if the key exists and initialize it. This is less concise compared to using defaultdict
.
Conclusion:
- Use
defaultdict(list)
when grouping multiple values (e.g., grouping items by category, finding anagrams). - Use a plain dictionary (
grouped = {}
) when each key maps to a single value, or when you need fine-grained control over how values are assigned.