Dict and set comprehensions
You know list comprehensions. The same idea builds dictionaries and sets.
Dictionary comprehensions
{key: value for item in iterable}:
Python
squares = {n: n * n for n in range(1, 6)}
print(squares)
names = ["asha", "leo", "mei"]
lengths = {name.title(): len(name) for name in names}
print(lengths)Building from two lists
Python
products = ["Keyboard", "Mouse", "Monitor"]
prices = [89.99, 24.50, 279.00]
catalogue = {p: price for p, price in zip(products, prices)}
print(catalogue)Transforming and filtering a dictionary
Python
prices = {"Keyboard": 89.99, "Mouse": 24.50, "Monitor": 279.00, "Lamp": 27.75}
with_tax = {item: round(p * 1.18, 2) for item, p in prices.items()}
cheap = {item: p for item, p in prices.items() if p < 50}
print(with_tax)
print(cheap)Inverting a dictionary
Swap keys and values (when the values are unique):
Python
codes = {"IN": "India", "JP": "Japan", "GB": "United Kingdom"}
by_name = {country: code for code, country in codes.items()}
print(by_name["Japan"])Set comprehensions
{expression for item in iterable}, with no colon, gives a set: unique values only:
Python
emails = ["asha@gmail.com", "leo@yahoo.com", "mei@gmail.com", "raj@outlook.com"]
domains = {e.split("@")[1] for e in emails}
print(domains)
words = "the quick brown fox jumps over the lazy dog".split()
print(sorted({len(w) for w in words}))Conditional values
Python
scores = {"Asha": 92, "Leo": 48, "Mei": 85, "Raj": 61}
results = {name: ("pass" if s >= 50 else "fail") for name, s in scores.items()}
print(results)Nested data
Python
classes = {"A": [72, 95, 88], "B": [64, 70], "C": [90, 85, 81, 77]}
averages = {cls: round(sum(m) / len(m), 1) for cls, m in classes.items()}
best = max(averages, key=averages.get)
print(averages, "best:", best)Finished this lesson?Mark it complete to earn +20 XP and move your progress on.