Store values under names (keys) and look them up instantly.
# create dict
person = {"name": "Alice", "age": 25}
empty = {}
scores = {"math": 90, "english": 85}
Each entry is a key: value pair; keys are unique.
# access by key
person = {"name": "Alice", "age": 25}
person["name"]
# ans: "Alice"
person["age"]
# ans: 25
A simplified picture: the key's hash picks a slot, so Python jumps straight there instead of searching every entry.
# get with default
person = {"name": "Alice"}
person.get("age")
# ans: None
person.get("age", 0)
# ans: 0
# add new key
person = {"name": "Alice"}
person["age"] = 25
# ans: {"name": "Alice", "age": 25}
# update existing
person["age"] = 26
# ans: {"name": "Alice", "age": 26}
The same syntax adds a key that is missing and replaces the value of a key that exists.
# delete key
person = {"name": "Alice", "age": 25}
del person["age"]
# ans: {"name": "Alice"}
# get keys, values, items
person = {"name": "Alice", "age": 25}
person.keys()
# ans: dict_keys(['name', 'age'])
person.values()
# ans: dict_values(['Alice', 25])
person.items()
# ans: dict_items([('name', 'Alice'), ('age', 25)])
Predict the result, then reveal it.
# what is the value?
d = {"a": 1, "b": 2}
d["a"]
# ans: 1
# key not found?
d = {"a": 1}
d["b"]
# ans: KeyError
# get vs brackets?
d = {"a": 1}
d.get("b")
# ans: None
d["b"]
# ans: KeyError
# adding new key?
d = {"a": 1}
d["b"] = 2
# ans: {"a": 1, "b": 2}
# updating value?
d = {"a": 1}
d["a"] = 10
# ans: {"a": 10}
# membership test?
d = {"a": 1, "b": 2}
"a" in d
# ans: True
1 in d
# ans: False (checks keys, not values)
# dict length?
d = {"a": 1, "b": 2, "c": 3}
len(d)
# ans: 3
# empty dict check?
d = {}
bool(d)
# ans: False
# nested dict?
d = {"user": {"name": "Alice", "age": 25}}
d["user"]["name"]
# ans: "Alice"
# dict from pairs?
pairs = [("a", 1), ("b", 2)]
d = dict(pairs)
# ans: {"a": 1, "b": 2}
d[key]Reads a value; a missing key raises KeyError.
d.get(key, default)Never raises: returns the default, or None.
d[key] = valueAdds a new key or replaces an existing value. del d[key] removes it.
in and lenBoth look at keys, not values. An empty dict is falsy.