In Python, dictionaries are key-value containers that provide fast access to data with a time complexity of O(1). However, in many applications, the user may not know all the keys present in a dictionary. Accessing a missing key directly results in a KeyError.
For Example:
dic = {'a': 1, 'b': 2}
print("The value associated with 'c' is:")
print(dic['c'])
Output
KeyError: 'c'
Notice that key = 'c' doesn't exist in the dictionary and that's why accessing it is giving KeyError.
Below are different methods of handling this in Python:
Using defaultdict
defaultdict from the collections module is highly efficient and avoids repeatedly writing checks. It allows you to set a default value for missing keys at the time of dictionary creation.
from collections import defaultdict
dic = defaultdict(lambda: 'Key Not found')
dic['a'] = 1
dic['b'] = 2
print(dic['a'])
print(dic['c'])
Output
1 Key Not found
Explanation:
- defaultdict(lambda: 'Key Not found'): creates a dictionary that returns a default value for missing keys instead of raising KeyError.
- dic['a'] = 1 and dic['b'] = 2 add existing keys.
Using get() Method
get() method allows you to retrieve a value if the key exists, or return a default value otherwise.
dic= {'India': '0091', 'Australia': '0025', 'Nepal': '00977'}
print(dic.get('India', 'Not Found'))
print(dic.get('Japan', 'Not Found'))
Output
0091 Not Found
Explanation:
- get(): retrieves the value for a given key.
- If the key exists, it returns its value, if not, it returns the default message provided.
Using setdefault() Method
setdefault() method works like get(), but if the key is missing, it creates the key with a default value.
dic = {'India': '0091', 'Australia': '0025', 'Nepal': '00977'}
dic.setdefault('Japan', 'Not Present')
print(dic['India'])
print(dic['Japan'])
Output
0091 Not Present
Explanation:
- setdefault(): returns the value of a key if it exists.
- If the key doesn’t exist, it adds the key with the given default value.
Using try-except Block
You can handle missing keys by catching the KeyError exception
dic = {'India': '0091', 'Australia': '0025', 'Nepal': '00977'}
try:
print(dic['India'])
print(dic['USA'])
except KeyError:
print('Not Found')
Output
0091 Not Found
Explanation:
- try-except block handles missing keys safely.
- Inside try, it tries to access dictionary values.
- If a key doesn’t exist, a KeyError is raised and caught by except, which prints 'Not Found'.
Using if key in dict
dic = {'a': 5, 'c': 8, 'e': 2}
if 'q' in dic:
print(dic['q'])
else:
print("Key not found")
Output
Key not found
Explanation:
- code checks if a key exists in the dictionary using the "in" operator.
- if the key is found, its value is printed; otherwise, a custom message is shown.