Basic dictionary comprehension in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to see how the time needed to create a dictionary using comprehension changes as the input grows.
How does the work increase when we have more items to process?
Analyze the time complexity of the following code snippet.
numbers = [1, 2, 3, 4, 5]
squares = {x: x * x for x in numbers}
This code creates a new dictionary where each number is paired with its square.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each item in the list to compute and add a key-value pair.
- How many times: Once for each item in the input list.
As the list gets bigger, the number of steps grows in a straight line with the number of items.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 steps |
| 100 | About 100 steps |
| 1000 | About 1000 steps |
Pattern observation: Doubling the input roughly doubles the work needed.
Time Complexity: O(n)
This means the time to build the dictionary grows directly with the number of items you start with.
[X] Wrong: "Dictionary comprehension is faster than a loop, so it must take less time as input grows."
[OK] Correct: Both dictionary comprehension and loops do the same work for each item, so time grows the same way with input size.
Understanding how dictionary comprehension scales helps you explain your code's efficiency clearly and confidently.
"What if we added a nested loop inside the dictionary comprehension? How would the time complexity change?"
Practice
{x: x*x for x in range(3)}Solution
Step 1: Understand the loop and key-value pairs
The comprehension loops over numbers 0, 1, 2 and uses each number as the key.Step 2: Calculate the value for each key
Each value is the square of the key (x*x), so values are 0, 1, 4 respectively.Final Answer:
Creates a dictionary with numbers 0 to 2 as keys and their squares as values -> Option CQuick Check:
Dictionary comprehension = key: x, value: x*x [OK]
- Confusing dictionary with list or set comprehension
- Mixing keys and values in comprehension
- Thinking it creates a list instead of a dictionary
Solution
Step 1: Identify correct dictionary comprehension syntax
Dictionary comprehensions use curly braces with key:value pairs and a for loop inside.Step 2: Check each option
{x: 2*x for x in range(1, 4)} uses curly braces and colon correctly. Options B, C, D use wrong brackets or arrow syntax.Final Answer:
{x: 2*x for x in range(1, 4)} -> Option BQuick Check:
Curly braces + key:value + for loop = correct syntax [OK]
- Using square brackets instead of curly braces
- Using arrow (=>) instead of colon for key-value
- Using parentheses which create generator expressions
nums = [1, 2, 3]
squares = {n: n**2 for n in nums if n % 2 != 0}
print(squares)Solution
Step 1: Understand the filtering condition
The comprehension includes only numbers where n % 2 != 0, meaning odd numbers only (1 and 3).Step 2: Calculate squares for filtered numbers
Squares are 1*1=1 and 3*3=9, so dictionary is {1:1, 3:9}.Final Answer:
{1: 1, 3: 9} -> Option AQuick Check:
Filter odd numbers and square them = {1:1, 3:9} [OK]
- Including even numbers by mistake
- Confusing list comprehension output with dictionary
- Ignoring the if condition in comprehension
result = {x, x*2 for x in range(3)}Solution
Step 1: Check syntax for key-value pairs
Dictionary comprehension requires a colon ':' between key and value, but here a comma ',' is used.Step 2: Confirm other parts are correct
Curly braces and range(3) are correct, so the error is the missing colon.Final Answer:
Missing colon between key and value -> Option AQuick Check:
Key:value pairs need colon, not comma [OK]
- Using comma instead of colon between key and value
- Confusing set comprehension with dictionary comprehension
- Using wrong brackets for comprehension
Which code correctly does this?
words = ['cat', 'house', 'dog', 'elephant']
Solution
Step 1: Understand filtering condition syntax
The if condition must come after the for loop to filter words by length correctly.Step 2: Check each option's syntax
{word: len(word) for word in words if len(word) > 3} correctly places 'if len(word) > 3' after the for loop. Others have syntax errors or wrong condition placement.Final Answer:
{word: len(word) for word in words if len(word) > 3} -> Option DQuick Check:
Filter after for loop with if condition [OK]
- Placing if condition before for loop
- Using invalid syntax like 'where' instead of 'if'
- Comparing word string directly to number
