How to Check if Key Exists in Dictionary in Python
What you’ll build or solve
You’ll check if a key exists in a Python dictionary without triggering errors.
When this approach works best
Checking for a key works well when you:
Learn Python on Mimo
- Read optional fields from API data, like
"phone"or"city"that may not appear. - Validate user input, like confirming a selected option exists in a lookup table.
- Avoid crashes when working with partial configs, like missing
"timeout"or"retries".
Avoid key checks when you only need a value with a fallback. In that case, dict.get() can be simpler than a separate existence check.
Prerequisites
- Python installed
- You know what a dictionary is
Step-by-step instructions
1) Check for a key with in
Use key in d to test existence. This is the clearest and most common approach.
user= {"name":"Naomi","email":"mina@example.com"}
if"email"inuser:
print("Email exists")
Option A: Handle missing keys
Bash
user= {"name":"Naomi"}
if"email"inuser:
print(user["email"])
else:
print("No email field")
What to look for:
in checks keys, not values. "Naomi" in user checks if "Naomi" is a key, not a value.
2) Use get() when you want the value too
Use d.get(key) when you want to read a value and handle missing keys without an exception.
user= {"name":"Naomi","email":"mina@example.com"}
email=user.get("email")
print(email)
Option A: Provide a default
user= {"name":"Naomi"}
email=user.get("email","")
print(email)
Option B: Distinguish “missing key” from “value is None”
get() returns None in both cases, so use in when you need to tell them apart.
Python
user= {"email":None}
if"email"inuser:
print("Key exists:",user["email"])
else:
print("Missing email key")
What to look for:
get() does not tell you why it returned None. If that distinction matters, check the key explicitly.
3) Catch KeyError only when needed
Use try/except when missing keys are rare and you want direct access with d[key].
user= {"name":"Naomi"}
try:
email=user["email"]
exceptKeyError:
email=""
print(email)
What to look for:
try/except keeps your code readable when you truly expect the key to exist, but still want a fallback in edge cases.
Examples you can copy
Example 1: Validate an allowed option
allowed= {"small":10,"medium":15,"large":20}
choice="medium"
ifchoiceinallowed:
print("Price:",allowed[choice])
else:
print("Unknown choice")
Example 2: Read optional data from an API-like dict
payload= {"id":"u1","name":"Naomi"}
city=payload.get("city","Unknown")
print(city)
Example 3: Check a config before using it
LUA
config= {"timeout":10,"retries":3}
if"timeout"inconfig:
print("Timeout:",config["timeout"])
else:
print("Timeout not set")
Example 4: Work safely with nested dictionaries
data= {"profile": {"name":"Naomi"}}
profile=data.get("profile", {})
has_city="city"inprofile
print(has_city)
Example 5: Check for a key in a loop of required fields
user= {"name":"Naomi","email":"mina@example.com"}
required= ["name","email","city"]
missing= [kforkinrequiredifknotinuser]
print(missing)
Common mistakes and how to fix them
Mistake 1: Using d[key] without checking first
What you might do
user= {"name":"Naomi"}
print(user["email"])
Why it breaks
Missing keys raise KeyError.
Fix
Bash
user= {"name":"Naomi"}
if"email"inuser:
print(user["email"])
else:
print("")
Or use:
Bash
user= {"name":"Naomi"}
print(user.get("email",""))
Mistake 2: Checking values instead of keys
What you might do
user= {"name":"Naomi","email":"mina@example.com"}
print("Naomi"inuser)
Why it breaks
in checks keys, so this returns False.
Fix
user= {"name":"Naomi","email":"mina@example.com"}
print("name"inuser)
If you want to check values:
user= {"name":"Naomi","email":"mina@example.com"}
print("Naomi"inuser.values())
Troubleshooting
If you see KeyError, switch to in or get(), or wrap access in try/except.
If get() returns None and you did not expect that, check if the key exists or if the stored value is actually None.
If your key check fails but the key looks correct, print repr(key) and repr(list(d.keys())) to spot hidden whitespace.
If nested keys are missing, use get() at each level with {} as a fallback.
If you need to check many keys, build a list of required keys and collect missing ones in a loop or comprehension.
Quick recap
- Use
key in dto check if a key exists. - Use
d.get(key, default)when you want a value with a fallback. - Use
inwhen you must distinguish “missing key” from “value is None.” - Use
try/except KeyErrorwhen you expect the key most of the time. - For nested dictionaries, use
get()at each level before checking deeper keys.
Join 35M+ people learning for free on Mimo
4.8 out of 5 across 1M+ reviews
Check us out on Apple AppStore, Google Play Store, and Trustpilot