Bài tập lập trình
Bài tập Dictionary Comprehension - Nâng cao

Bài tập Dictionary Comprehension - Nâng cao

  1. Viết dictionary comprehension tạo nested dictionary bảng cửu chương từ 1-5.
# Kết quả: {1: {1: 1, 2: 2, 3: 3, 4: 4, 5: 5}, 2: {1: 2, 2: 4, ...}, ...}
multiplication_table = # Code của bạn ở đây
print(multiplication_table)
  1. Viết dictionary comprehension làm phẳng nested dictionary.
nested = {"a": {"x": 1, "y": 2}, "b": {"x": 3, "y": 4}}
# Kết quả: {'a_x': 1, 'a_y': 2, 'b_x': 3, 'b_y': 4}
flat = # Code của bạn ở đây
print(flat)
  1. Viết dictionary comprehension nhóm danh sách số theo chẵn/lẻ.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Kết quả: {'even': [2, 4, 6, 8, 10], 'odd': [1, 3, 5, 7, 9]}
grouped = {
    "even": [n for n in numbers if n % 2 == 0],
    "odd": [n for n in numbers if n % 2 != 0]
}
print(grouped)
  1. Viết dictionary comprehension đếm tần suất từ trong văn bản.
text = "apple banana apple cherry banana apple"
words = text.split()
# Kết quả: {'apple': 3, 'banana': 2, 'cherry': 1}
word_freq = # Code của bạn ở đây
print(word_freq)
  1. Viết dictionary comprehension merge nhiều dictionaries với xử lý conflict.
dicts = [
    {"a": 1, "b": 2},
    {"b": 3, "c": 4},
    {"c": 5, "d": 6}
]
# Lấy giá trị cuối cùng khi key trùng
# Kết quả: {'a': 1, 'b': 3, 'c': 5, 'd': 6}
merged = {k: v for d in dicts for k, v in d.items()}
print(merged)
  1. Viết dictionary comprehension tạo dictionary với multiple conditions.
# Chỉ lấy số chia hết cho 2 và 3, value là số nhân với 10
numbers = range(1, 31)
# Kết quả: {6: 60, 12: 120, 18: 180, 24: 240, 30: 300}
special_numbers = # Code của bạn ở đây
print(special_numbers)
  1. Viết dictionary comprehension tạo inverted index từ list of documents.
documents = [
    "python is great",
    "java is popular",
    "python is easy"
]
# Kết quả: {'python': [0, 2], 'is': [0, 1, 2], 'great': [0], 'java': [1], ...}
inverted_index = # Code của bạn ở đây
print(inverted_index)

💡 Gợi ý: Dùng nested comprehension và enumerate

  1. Viết dictionary comprehension tính điểm trung bình cho mỗi học sinh.
scores = {
    "Alice": [85, 90, 88],
    "Bob": [70, 75, 72],
    "Charlie": [95, 92, 98]
}
# Kết quả: {'Alice': 87.67, 'Bob': 72.33, 'Charlie': 95.0}
averages = # Code của bạn ở đây
print(averages)
  1. Viết dictionary comprehension tạo lookup dictionary từ list of tuples.
products = [
    ("P001", "Laptop", 1000),
    ("P002", "Mouse", 20),
    ("P003", "Keyboard", 50)
]
# Kết quả: {'P001': {'name': 'Laptop', 'price': 1000}, ...}
product_lookup = # Code của bạn ở đây
print(product_lookup)
  1. Viết dictionary comprehension tạo matrix từ nested comprehension.
size = 3
# Kết quả: {(0, 0): 0, (0, 1): 0, (0, 2): 0, (1, 0): 0, ...}
# Value = 1 nếu i == j (diagonal), ngược lại 0
identity_matrix = # Code của bạn ở đây
print(identity_matrix)
  1. Viết dictionary comprehension phân loại điểm theo grade (A, B, C, D, F).
scores = {"Alice": 95, "Bob": 78, "Charlie": 65, "David": 82, "Eve": 55}
# A: 90-100, B: 80-89, C: 70-79, D: 60-69, F: <60
grades = # Code của bạn ở đây
print(grades)
  1. Viết dictionary comprehension tạo histogram của độ dài từ.
words = ["a", "ab", "abc", "ab", "abcd", "abc", "a"]
# Kết quả: {1: 2, 2: 2, 3: 2, 4: 1}
length_histogram = # Code của bạn ở đây
print(length_histogram)
  1. Viết dictionary comprehension extract parameters từ URL query string.
query_string = "name=Alice&age=25&city=Hanoi&country=Vietnam"
# Kết quả: {'name': 'Alice', 'age': '25', 'city': 'Hanoi', 'country': 'Vietnam'}
params = # Code của bạn ở đây
print(params)
  1. Viết dictionary comprehension tạo adjacency list từ list of edges.
edges = [(1, 2), (1, 3), (2, 3), (3, 4)]
# Kết quả: {1: [2, 3], 2: [3], 3: [4], 4: []}
graph = # Code của bạn ở đây
print(graph)
  1. Viết dictionary comprehension normalize values (0-1 range).
scores = {"Alice": 50, "Bob": 75, "Charlie": 100, "David": 25}
# Công thức: (value - min) / (max - min)
# Kết quả: {'Alice': 0.333..., 'Bob': 0.666..., 'Charlie': 1.0, 'David': 0.0}
normalized = # Code của bạn ở đây
print(normalized)
  1. Viết dictionary comprehension tạo mapping giữa tên file và extension.
files = ["document.pdf", "image.png", "script.py", "data.csv", "photo.jpg"]
# Kết quả: {'pdf': ['document.pdf'], 'png': ['image.png'], ...}
by_extension = # Code của bạn ở đây
print(by_extension)
  1. Viết dictionary comprehension transpose dictionary of lists.
data = {
    "name": ["Alice", "Bob", "Charlie"],
    "age": [25, 30, 35],
    "city": ["Hanoi", "HCMC", "Da Nang"]
}
# Kết quả: [
#     {'name': 'Alice', 'age': 25, 'city': 'Hanoi'},
#     {'name': 'Bob', 'age': 30, 'city': 'HCMC'},
#     {'name': 'Charlie', 'age': 35, 'city': 'Da Nang'}
# ]
transposed = # Code của bạn ở đây
print(transposed)
  1. Viết dictionary comprehension tạo lookup cho anagrams.
words = ["listen", "silent", "hello", "world", "enlist"]
# Kết quả: {'eilnst': ['listen', 'silent', 'enlist'], 'ehllo': ['hello'], ...}
anagram_groups = # Code của bạn ở đây
print(anagram_groups)

💡 Gợi ý: Dùng sorted() để tạo signature cho mỗi từ

  1. Viết dictionary comprehension tính TF (term frequency) cho documents.
documents = [
    "python is great",
    "python is powerful",
    "java is popular"
]
# TF = số lần xuất hiện / tổng số từ trong document
# Kết quả: {0: {'python': 0.333, 'is': 0.333, 'great': 0.333}, ...}
tf = # Code của bạn ở đây
print(tf)
  1. Viết dictionary comprehension tạo mapping từ student ID sang full info.
student_ids = ["S001", "S002", "S003"]
names = ["Alice", "Bob", "Charlie"]
ages = [20, 21, 22]
grades = ["A", "B", "A"]
 
# Kết quả: {
#     'S001': {'name': 'Alice', 'age': 20, 'grade': 'A'},
#     'S002': {'name': 'Bob', 'age': 21, 'grade': 'B'},
#     ...
# }
students = # Code của bạn ở đây
print(students)
  1. Viết dictionary comprehension tính cumulative sum.
numbers = {"Jan": 100, "Feb": 150, "Mar": 200, "Apr": 120}
# Kết quả: {'Jan': 100, 'Feb': 250, 'Mar': 450, 'Apr': 570}
# Hint: Dùng itertools.accumulate hoặc tự tính
cumulative = # Code của bạn ở đây
print(cumulative)
  1. Viết dictionary comprehension filter và transform nested data.
users = [
    {"name": "Alice", "age": 25, "active": True},
    {"name": "Bob", "age": 17, "active": False},
    {"name": "Charlie", "age": 30, "active": True}
]
# Chỉ lấy user active và age >= 18, mapping name -> age
# Kết quả: {'Alice': 25, 'Charlie': 30}
adult_active_users = # Code của bạn ở đây
print(adult_active_users)
  1. Viết dictionary comprehension tạo lookup cho substring search.
words = ["apple", "application", "apply", "banana", "band"]
prefix = "app"
# Tìm tất cả từ bắt đầu với prefix, mapping word -> length
# Kết quả: {'apple': 5, 'application': 11, 'apply': 5}
prefix_words = # Code của bạn ở đây
print(prefix_words)
  1. Viết dictionary comprehension calculate moving average.
prices = {"Day1": 100, "Day2": 102, "Day3": 98, "Day4": 105, "Day5": 110}
window = 3
# Tính moving average với window size = 3
# Kết quả: {'Day3': 100.0, 'Day4': 101.67, 'Day5': 104.33}
moving_avg = # Code của bạn ở đây
print(moving_avg)
  1. Viết dictionary comprehension tạo Caesar cipher mapping.
shift = 3
# Tạo mapping a->d, b->e, c->f, ...
# Kết quả: {'a': 'd', 'b': 'e', 'c': 'f', ..., 'x': 'a', 'y': 'b', 'z': 'c'}
caesar_map = # Code của bạn ở đây
print(caesar_map)

💡 Gợi ý: Dùng ord(), chr() và modulo


Lập trình Python - Bumbii Academy