defaultdict
in Pythondefaultdict
is a subclass of Python’s built-in dict
that automatically provides a default value for missing keys, preventing KeyError
. It’s part of the collections
module.
defaultdict
?KeyError
when accessing missing keys.defaultdict
defaultdict
(Using Normal dict
)my_dict = {}
my_dict["a"].append(1) # ? KeyError: 'a' (Key does not exist)
defaultdict
(Prevents KeyError
)from collections import defaultdict
# Creates a defaultdict with list as the default factory
my_dict = defaultdict(list)
# No KeyError, automatically initializes 'a' as an empty list
my_dict["a"].append(1)
print(my_dict) # Output: {'a': [1]}
* No KeyError! defaultdict
automatically creates an empty list.
defaultdict
You can pass a factory function to specify default values:
Default Factory | Example | Default Value |
---|---|---|
list |
defaultdict(list) |
[] (Empty list) |
int |
defaultdict(int) |
0 |
set |
defaultdict(set) |
set() (Empty set) |
str |
defaultdict(str) |
'' (Empty string) |
lambda: custom_value |
defaultdict(lambda: 100) |
100 |
int
to Count Occurrencesword_count = defaultdict(int)
words = ["apple", "banana", "apple", "orange", "banana", "banana"]
for word in words:
word_count[word] += 1 # No need to check if key exists!
print(word_count) # Output: {'apple': 2, 'banana': 3, 'orange': 1}
* No need to initialize keys manually!
defaultdict
(Creating Auto-Nested Dictionaries)defaultdict
can be used to create nested dictionaries without manually initializing sub-dictionaries.
nested_dict = defaultdict(lambda: defaultdict(int))
nested_dict["A"]["Math"] = 90
nested_dict["A"]["Science"] = 85
print(nested_dict)
# Output: {'A': {'Math': 90, 'Science': 85}}
* Automatically creates sub-dictionaries when accessing missing keys.
defaultdict
vs. dict
?Feature | dict |
defaultdict |
---|---|---|
Handles missing keys | ? No (KeyError ) |
? Yes (Auto-initialized) |
Requires manual initialization | ? Yes | ? No |
Best for | Simple lookups | Grouping, counting, nesting |
defaultdict
?* When grouping elements (defaultdict(list)
)
* When counting occurrences (defaultdict(int)
)
* When creating nested dictionaries (defaultdict(lambda: defaultdict(int))