Creating Dictionaries
# Literal syntax
user = {"name": "Alice", "age": 30}
# From keyword arguments
user = dict(name="Alice", age=30)
# From a list of tuples
user = dict([("name", "Alice"), ("age", 30)])
get() — Safe Access
Access a key without risking a KeyError:
user = {"name": "Alice"}
user["email"] # KeyError!
user.get("email") # None
user.get("email", "N/A") # "N/A"
Use get() whenever the key might not exist.
setdefault() — Get or Initialize
Returns the value if the key exists. Otherwise, sets the key to a default and returns it:
counts = {}
counts.setdefault("apple", 0) # Returns 0, sets counts["apple"] = 0
counts["apple"] += 1 # counts = {"apple": 1}
update() — Merge Dictionaries
defaults = {"color": "blue", "size": "medium"}
overrides = {"size": "large", "weight": "heavy"}
defaults.update(overrides)
# {"color": "blue", "size": "large", "weight": "heavy"}
In Python 3.9+, you can also use the | operator:
merged = defaults | overrides
items(), keys(), values()
These return view objects for iteration:
user = {"name": "Alice", "age": 30, "city": "Paris"}
for key, value in user.items():
print(f"{key}: {value}")
list(user.keys()) # ["name", "age", "city"]
list(user.values()) # ["Alice", 30, "Paris"]
pop() — Remove and Return
user = {"name": "Alice", "age": 30}
age = user.pop("age") # Returns 30, removes "age"
email = user.pop("email", None) # Returns None, no error
Dictionary Comprehensions
squares = {x: x**2 for x in range(6)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Filter while creating
even_squares = {x: x**2 for x in range(6) if x % 2 == 0}
# {0: 0, 2: 4, 4: 16}