What is a Dictionary?
# Syntax
my_dict = {
    "key1": "value1",
    "key2": "value2"
}
Example:
student = {
    "name": "Alice",
    "age": 22,
    "course": "Computer Science"
}
Dictionary Basics
1. Accessing Values
print(student["name"])   # Output: Alice
You can also use .get() which avoids an error if the key doesn't exist:
print(student.get("email", "Not Found"))  # Output: Not Found
2. Modifying Values
student["age"] = 23
3. Adding New Key-Value Pair
student["email"] = "alice@example.com"
4. Removing Elements
student.pop("course")  # Removes 'course' key
 Dictionary Methods
| Method | 
Description | 
dict.keys() | 
Returns all keys | 
dict.values() | 
Returns all values | 
dict.items() | 
Returns key-value pairs | 
dict.update({...}) | 
Updates dictionary with new pairs | 
dict.pop(key) | 
Removes the item with the given key | 
dict.clear() | 
Removes all items | 
Example:
print(student.keys())    # dict_keys(['name', 'age', 'email'])
print(student.values())  # dict_values(['Alice', 23, 'alice@example.com'])
print(student.items())   # dict_items([('name', 'Alice'), ...])
Dictionary Types (Based on Structure)
1. Nested Dictionary
A dictionary inside another dictionary.
students = {
    "101": {"name": "Alice", "age": 22},
    "102": {"name": "Bob", "age": 24}
}
print(students["101"]["name"])  # Output: Alice
2. Empty Dictionary
empty_dict = {}
3. Using dict() Constructor
data = dict(name="John", age=30)
print(data)  # {'name': 'John', 'age': 30}
4. Dictionary with Mixed Data Types
info = {
    "name": "Alice",
    "age": 25,
    "marks": [85, 90, 92],
    "is_graduated": True
}
5. Dictionary with Tuple Keys
Keys must be immutable — so tuples are allowed.
location = {
    (10.4, 20.3): "Point A",
    (11.5, 22.1): "Point B"
}
Looping Through a Dictionary
for key, value in student.items():
    print(f"{key}: {value}")
Dictionary Comprehension
squares = {x: x*x for x in range(1, 6)}
print(squares)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Summary Table
| Feature | 
Syntax/Example | 
| Create | 
d = {"a": 1, "b": 2} | 
| Access | 
d["a"] or d.get("a") | 
| Add/Update | 
d["c"] = 3 | 
| Delete | 
d.pop("a") or del d["a"] | 
| Loop | 
for k, v in d.items() | 
| Keys / Values / Items | 
d.keys(), d.values(), d.items() | 
| Nested Dictionary | 
d = {"outer": {"inner": "value"}} |