Toolbly
Guide
4 min read

Advanced List Comprehension Techniques: Dicts, Sets, and Walruses (2026)

Toolbly Team
Toolbly Team
|
January 16, 2026

So you have mastered the list comprehension. You can filter, transform, and flatten. What's next?

Python's comprehension syntax is not limited to Lists. It extends to Dictionaries and Sets, and it integrates seamlessly with advanced iterators like zip, enumerate, and the controversial "Walrus Operator" (:=).

These are the techniques that distinguish a Python Scripter from a Python Engineer.

Table of Contents

  1. Dictionary Comprehensions
  2. Set Comprehensions
  3. The Walrus Operator (Assignment Expressions)
  4. Advanced Iterators (Zip & Enumerate)
  5. Real-world ETL Pipeline Example
  6. FAQ
  7. Test Your Knowledge (Quiz)

Dictionary Comprehensions

Just as [] creates a list, {} with a colon : creates a dictionary in one line.

Advertisement

The Syntax

{key_expr: value_expr for item in iterable}

Use Case 1: Inverting a Dictionary

Swap keys and values instantly.

stocks = {'AAPL': 150, 'GOOG': 2800}
price_to_ticker = {price: ticker for ticker, price in stocks.items()}
# Result: {150: 'AAPL', 2800: 'GOOG'}

Use Case 2: Indexing Data

Turn a list of objects into a lookup table (Hash Map).

users = [('alice', 1), ('bob', 2)]
id_map = {user_id: name for name, user_id in users}
# Result: {1: 'alice', 2: 'bob'}

Use Case 3: Filtering Dicts

Remove sensitive keys from a payload.

payload = {'name': 'Alice', 'password': '123', 'id': 5}
safe_data = {k: v for k, v in payload.items() if k != 'password'}

Set Comprehensions

If you use curly braces {} without a colon, you create a Set. This is useful for finding unique values.

The Syntax

{expression for item in iterable}

Use Case: Unique Extension Finder

Find distinct file types in a directory.

Advertisement
files = ['idx.html', 'style.css', 'data.json', 'about.html']
extentions = {f.split('.')[-1] for f in files}
# Result: {'html', 'css', 'json'} (Order not guaranteed)

The Walrus Operator := (Python 3.8+)

This operator allows you to assign a value to a variable inside an expression. In comprehensions, it solves a major inefficiency: Calculating a value in the filter, and then re-calculating it in the output.

Visualizing The Win

Without Walrus (Redundant):

   [ Call func(x) ] <---- [ Loop x ] ----> [ Check func(x) > 5? ]
        ^                                        |
        | (Calc TWICE!)                          |
        +----------------------------------------+

With Walrus (Efficient):

   [     y        ] <---- [ Loop x ] ----> [ Check (y := func(x)) > 5? ]
        ^                                        |
        | (Reuse 'y')                            |
        +----------------------------------------+

The Code:

Advertisement
# Efficient: Calls calculate_score once
res = [y for x in data if (y := calculate_score(x)) > 50]

Advanced Iterators (Zip & Enumerate)

Don't reinvent the wheel. Use Python's built-in iterators.

Zip: Syncing Two Lists

Stop using range(len(list)). Use zip to walk two lists side-by-side.

names = ["A", "B"]
scores = [10, 20]

# Create a gradebook
gradebook = {name: score for name, score in zip(names, scores)}
# Result: {'A': 10, 'B': 20}

Enumerate: Index Tracking

Need the index? Use enumerate.

lines = ["header", "data1", "data2"]
# Skip the header (index 0)
data_lines = [line for i, line in enumerate(lines) if i > 0]

Real-world ETL Pipeline Example

Let's combine everything. Imagine parsing a raw log string into structured JSON.

log_line = "USER=alice ERROR=404 TIME=12:00"

# Dict Comp + Walrus + Split
parsed = {
    (parts := item.split("="))[0]: parts[1] 
    for item in log_line.split() 
    if "=" in item
}
# Result: {'USER': 'alice', 'ERROR': '404', 'TIME': '12:00'}

FAQ

Q1: Is there a Tuple Comprehension?

A: No. (x for x in y) creates a Generator expression. To get a tuple, wrap it: tuple(x for x in y).

Advertisement

Q2: Can I combine Set and List comprehensions?

A: You can nest them. [{x for x in sublist} for sublist in matrix] creates a list of sets.

Q3: Does zip fail if lists are different lengths?

A: zip() stops at the shortest list. If you need the longest, use itertools.zip_longest().


Test Your Knowledge

Conclusion

Python's comprehension syntax is a unified language for data creation. Once you master the [], {}, and () variants, standard data manipulation becomes trivial.

Next Steps:

T

Toolbly Team

Author

Writer and explorer at Toolbly. Passionate about software development, DevOps, and building useful tools for the web.

Share: