Ảnh giới thiệu Series Học Python từ A đến Z

Học Python cơ bản từ A đến Z cho người mới bắt đầu (bài 10)

Module 4: Sắp Xếp Dữ Liệu – Xây Dựng Kho Lưu Trữ Tri Thức

Bài 10: Dictionary & Set: Kho Lưu Trữ Dữ Liệu Có Cấu Trúc – Tổ Chức Vũ Trụ Tri Thức

Mục tiêu:

• Hiểu rõ khái niệm và công dụng của Dictionary (từ điển) và Set (tập hợp) trong Python.

• Nắm vững cách tạo, truy cập và thao tác với dữ liệu trong Dictionary bằng các cặp khóa-giá trị (key-value pair).

• Khám phá sức mạnh của Set trong việc quản lý các phần tử độc nhất và thực hiện các phép toán tập hợp.

• Áp dụng Dictionary và Set để giải quyết các vấn đề thực tế như đếm tần suất, lọc dữ liệu trùng lặp.

• Liên hệ các cấu trúc này với việc tổ chức dữ liệu trong các hệ thống AI và Data Science.

1. Mở Đầu: Hệ Điều Hành Thiên Hà – Nơi Mọi Thông Tin Được Sắp Xếp

Chào mừng các bạn, những nhà thám hiểm vũ trụ tri thức của Python! Trong những bài học trước, chúng ta đã chinh phục các hành tinh String (chuỗi ký tự) và List (danh sách tuần tự) – những công cụ cơ bản để lưu trữ và sắp xếp dữ liệu. Hôm nay, chúng ta sẽ nâng cấp kho lưu trữ của mình lên một tầm cao mới, nơi mọi thông tin không chỉ được sắp xếp mà còn được gắn nhãn, dễ dàng tìm kiếm và quản lý.

Hãy tưởng tượng bạn là người quản lý Hệ Điều Hành Thiên Hà – một siêu máy tính khổng lồ chứa đựng mọi thông tin về các hành tinh, chủng tộc, công nghệ và lịch sử vũ trụ. Nếu mọi thứ chỉ là một danh sách dài dằng dặc, bạn sẽ mất bao lâu để tìm kiếm thông tin về “nguồn gốc năng lượng của hành tinh Xylos-7”? Rất lâu, phải không?

Đây chính là lúc chúng ta cần đến Dictionary (Từ điển)Set (Tập hợp) trong Python. Dictionary giống như một thư viện vũ trụ khổng lồ, nơi mỗi cuốn sách (giá trị) đều có một thẻ mục lục (khóa) duy nhất để bạn tìm thấy nó ngay lập tức. Còn Set thì giống như một “bộ lọc” thông minh, chỉ giữ lại những thông tin độc nhất vô nhị, loại bỏ mọi sự trùng lặp không cần thiết.

Hai cấu trúc dữ liệu này là xương sống của rất nhiều ứng dụng thực tế, từ quản lý hồ sơ người dùng trong một hệ thống AI, phân tích tần suất từ trong các mô hình xử lý ngôn ngữ tự nhiên, cho đến việc tổ chức dữ liệu trong các cơ sở dữ liệu khổng lồ.

Bạn đã sẵn sàng để khám phá những kho lưu trữ dữ liệu thông minh này và trở thành bậc thầy tổ chức thông tin trong thế giới số chưa? Hãy cùng bắt đầu!

2. Lý Thuyết & Khái Niệm: Kho Tàng Tri Thức Với Nhãn Dán & Bộ Lọc Tinh Thể

2.1. Dictionary (Từ điển) – Kho Lưu Trữ Với Nhãn Dán Thông Minh

Trong Python, Dictionary là một tập hợp các cặp khóa-giá trị (key-value pair) không có thứ tự. Mỗi khóa là duy nhất và được dùng để truy cập vào giá trị tương ứng. Hãy nghĩ Dictionary như một danh bạ điện thoại: tên người (khóa) là duy nhất, và bạn dùng tên đó để tìm số điện thoại (giá trị).

Cách tạo Dictionary:

Bạn có thể tạo một Dictionary rỗng bằng dict() hoặc bằng cặp dấu ngoặc nhọn {}. Để thêm các cặp khóa-giá trị, bạn sử dụng cú pháp dictionary[key] = value.

# Tạo một dictionary rỗng - như một kho dữ liệu chưa có gì
galaxy_map = dict()
print(galaxy_map) # Output: {}

# Thêm thông tin về các hành tinh vào bản đồ thiên hà
galaxy_map['Terra'] = 'Hành tinh xanh, trung tâm Liên Minh'
galaxy_map['Mars'] = 'Hành tinh đỏ, căn cứ huấn luyện'
galaxy_map['Zylos-9'] = 'Hành tinh băng giá, có nguồn năng lượng hiếm'

print(galaxy_map)
# Output: {'Terra': 'Hành tinh xanh, trung tâm Liên Minh', 'Mars': 'Hành tinh đỏ, căn cứ huấn luyện', 'Zylos-9': 'Hành tinh băng giá, có nguồn năng lượng hiếm'}

# Hoặc tạo Dictionary ngay từ đầu
star_systems = {'Sirius': 'Hệ thống sao đôi', 'Alpha Centauri': 'Hệ thống sao gần nhất'}
print(star_systems)

(Tham khảo thêm: [Dictionaries.pdf] trang 6 và [Bài 9.docx] để hiểu về khái niệm và cách tạo Dictionary.)

Truy cập Giá trị bằng Khóa:

Đây là sức mạnh của Dictionary! Bạn chỉ cần biết khóa để truy xuất ngay lập tức giá trị tương ứng.

print(f"Thông tin về Terra: {galaxy_map['Terra']}") # Output: Thông tin về Terra: Hành tinh xanh, trung tâm Liên Minh
# print(galaxy_map['Jupiter']) # Dòng này sẽ gây lỗi nếu 'Jupiter' không tồn tại

(Tham khảo thêm: [Dictionaries.pdf] trang 7.)

Sử dụng toán tử in để kiểm tra Khóa:

Trước khi truy cập, hãy kiểm tra xem khóa có tồn tại trong Dictionary hay không để tránh lỗi.

if 'Mars' in galaxy_map:
    print("Mars đã có trong bản đồ.")
else:
    print("Mars chưa được khám phá.")

Phương thức get() – An toàn hơn khi truy cập:

Phương thức get() cho phép bạn truy cập giá trị bằng khóa, nhưng nếu khóa không tồn tại, nó sẽ trả về một giá trị mặc định thay vì gây lỗi. Điều này cực kỳ hữu ích trong các hệ thống phức tạp.

info_venus = galaxy_map.get('Venus', 'Chưa có dữ liệu về hành tinh này.')
print(info_venus) # Output: Chưa có dữ liệu về hành tinh này.

info_mars = galaxy_map.get('Mars', 'Chưa có dữ liệu về hành tinh này.')
print(info_mars) # Output: Hành tinh đỏ, căn cứ huấn luyện

(Tham khảo thêm: [Counting with Dictionaries.pdf] trang 7.)

Duyệt qua Dictionary (for loop):

Bạn có thể duyệt qua các khóa, các giá trị, hoặc cả cặp khóa-giá trị trong Dictionary.

print("\nDanh sách các hành tinh đã ghi nhận:")
for planet_name in galaxy_map: # Mặc định duyệt qua các khóa
    print(f"- Tên hành tinh: {planet_name}")

print("\nThông tin chi tiết các hành tinh:")
for planet_name, description in galaxy_map.items(): # Duyệt qua cả khóa và giá trị
    print(f"- {planet_name}: {description}")

(Tham khảo thêm: [Dictionaries and Files.pdf] trang 8.)

Video Coursera (Dictionary cơ bản):

Để hiểu rõ hơn về Dictionary và cách hoạt động của chúng, hãy xem video này:

Video: Dictionaries (Coursera):

2.2. Counting with Dictionaries – Thống Kê Tần Suất Dữ Liệu

Một trong những ứng dụng phổ biến nhất của Dictionary là để đếm tần suất xuất hiện của các mục. Ví dụ, đếm số lần mỗi từ xuất hiện trong một văn bản.

# Đếm tần suất từ trong một thông điệp nhận được
incoming_transmission = "AI_core online. System ready. AI_core analyzing data. System offline."
words = incoming_transmission.lower().split() # Chuyển về chữ thường và tách thành từ

word_counts = dict()
for word in words:
    word_counts[word] = word_counts.get(word, 0) + 1 # Sử dụng get() để an toàn

print(f"Thống kê tần suất từ: {word_counts}")
# Output: {'ai_core': 2, 'online.': 1, 'system': 2, 'ready.': 1, 'analyzing': 1, 'data.': 1, 'offline.': 1}

(Tham khảo thêm: [Counting with Dictionaries.pdf] trang 6.)

Video Coursera (Đếm với Dictionary):

Xem video dưới đây để hiểu sâu hơn về cách ứng dụng Dictionary để đếm tần suất:

Video: Counting with Dictionaries (Coursera):

2.3. Dictionaries and Files – Phân Tích Dữ Liệu Từ Hồ Sơ Vũ Trụ

Dictionary thường được sử dụng cùng với việc đọc và xử lý các tệp dữ liệu, chẳng hạn như tệp nhật ký của tàu vũ trụ hoặc báo cáo nghiên cứu.

# Ví dụ đơn giản: Đọc dữ liệu từ một "tệp nhật ký" và đếm từ
# Tạo một tệp ảo để minh họa
# with open('ship_log.txt', 'w') as f:
#    f.write("System log: Ship engaged warp drive. Warp drive engaged successfully. Ship parameters nominal.\n")
#    f.write("System log: Communications established. Communications secure.")

# counts = dict()
# with open('ship_log.txt', 'r') as file_handle:
#     for line in file_handle:
#         words = line.split()
#         for word in words:
#             counts[word] = counts.get(word, 0) + 1

# print(f"Thống kê từ trong nhật ký tàu: {counts}")

(Tham khảo thêm: [Dictionaries and Files.pdf] trang 8.)

Video Coursera (Dictionary và Files):

Video: Dictionaries and Files (Coursera):

2.4. Set (Tập hợp) – Bộ Lọc Tinh Thể Loại Bỏ Trùng Lặp

Set là một tập hợp các phần tử không có thứ tự và không chứa các phần tử trùng lặp. Mỗi phần tử trong Set là duy nhất. Hãy nghĩ Set như một “bộ lọc tinh thể” chỉ giữ lại những viên đá quý độc nhất, loại bỏ mọi viên đá nhân bản.

Cách tạo Set:

Bạn có thể tạo một Set rỗng bằng set() hoặc bằng dấu ngoặc nhọn {} (lưu ý: {} rỗng sẽ tạo Dictionary, {1, 2, 3} sẽ tạo Set).

# Tạo một Set từ một danh sách các hành tinh đã ghé thăm (có thể có trùng lặp)
visited_planets_list = ['Terra', 'Mars', 'Terra', 'Zylos-9', 'Mars', 'Jupiter']
unique_planets = set(visited_planets_list)
print(f"Các hành tinh đã ghé thăm (duy nhất): {unique_planets}")
# Output: {'Terra', 'Zylos-9', 'Mars', 'Jupiter'} (Thứ tự có thể khác)

# Tạo một Set rỗng và thêm phần tử
my_set = set()
my_set.add('Alpha')
my_set.add('Beta')
my_set.add('Alpha') # Thêm phần tử trùng lặp sẽ không có tác dụng
print(my_set) # Output: {'Alpha', 'Beta'}

(Tham khảo thêm các file Lab 8.1.docx và Lab 8.2.docx để hiểu thêm về set và phương thức add().)

Các thao tác với Set:

Set hỗ trợ các phép toán tập hợp như hợp (union), giao (intersection), hiệu (difference) – cực kỳ hữu ích trong phân tích dữ liệu.

# Các nhiệm vụ của đội trinh sát
team_alpha_missions = {'Khảo sát Sao Kim', 'Tìm kiếm tài nguyên', 'Giao tiếp với chủng tộc X'}
team_beta_missions = {'Tìm kiếm tài nguyên', 'Lập bản đồ thiên hà', 'Khảo sát Sao Hỏa'}

# Các nhiệm vụ chung (phép giao)
common_missions = team_alpha_missions.intersection(team_beta_missions)
print(f"Nhiệm vụ chung: {common_missions}") # Output: {'Tìm kiếm tài nguyên'}

# Tất cả các nhiệm vụ (phép hợp)
all_missions = team_alpha_missions.union(team_beta_missions)
print(f"Tất cả nhiệm vụ: {all_missions}")
# Output: {'Giao tiếp với chủng tộc X', 'Tìm kiếm tài nguyên', 'Lập bản đồ thiên hà', 'Khảo sát Sao Hỏa', 'Khảo sát Sao Kim'}

(Tham khảo thêm: [Lab 8.3.docx] để hiểu thêm về phương thức remove() với Set.)

3. Thực Hành & Vận Dụng: Xây Dựng Cơ Sở Dữ Liệu Liên Hành Tinh

Bây giờ, hãy áp dụng kiến thức về Dictionary và Set để giải quyết các vấn đề thực tế, như một nhà khoa học dữ liệu vũ trụ!

Google Colab (Thực hành cốt lõi):

Hãy mở Notebook Google Colab sau để bắt đầu các nhiệm vụ thực hành. Notebook này chứa các đoạn code mẫu và các thử thách thú vị:

• Link Google Colab: [Sẽ tạo một Notebook mới với các nội dung dưới đây và chèn link vào đây]Nội dung dự kiến trong Colab Notebook:

• Phần 1: Khám Phá Dictionary – Hồ Sơ Phi Hành Đoàn

• Tạo Dictionary lưu trữ thông tin cá nhân của phi hành đoàn (tên, chức vụ, hành tinh quê hương).

• Truy cập thông tin của một thành viên cụ thể.

• Sử dụng get() để lấy thông tin an toàn.

• Duyệt qua danh sách thành viên và chức vụ của họ.

• Nhiệm vụ 1: Hồ sơ tội phạm thiên hà.

• Tạo một Dictionary criminal_records với khóa là ID tội phạm và giá trị là tên tội phạm.

• Thêm 3-5 hồ sơ.

• Cho phép người dùng nhập một ID và in ra tên tội phạm hoặc “Không tìm thấy” nếu ID không tồn tại.

• In ra tất cả các ID và tên tội phạm có trong hồ sơ.

• Phần 2: Đếm Tần Suất – Phân Tích Dữ Liệu Hành Trình

• Sử dụng Dictionary để đếm tần suất các loại vật phẩm được thu thập trong một hành trình.

• Thử thách 2: Phân tích tần suất từ khóa báo cáo.

• Cho một đoạn văn bản (String) mô tả một báo cáo nhiệm vụ.

• Tách văn bản thành các từ và đếm tần suất xuất hiện của mỗi từ, lưu vào Dictionary.

• In ra từ xuất hiện nhiều nhất.

• Phần 3: Set – Quản Lý Các Loại Tài Nguyên Độc Nhất

• Tạo Set từ một List chứa các tài nguyên có thể trùng lặp để chỉ giữ lại các loại tài nguyên độc nhất.

• Thực hiện các phép toán hợp, giao, hiệu giữa hai Set tài nguyên.

• Nhiệm vụ 3: Danh sách hành tinh đã ghé thăm.

• Bạn có hai danh sách các hành tinh mà hai tàu thăm dò đã ghé thăm: ship_A_visits = [‘Mars’, ‘Jupiter’, ‘Earth’, ‘Jupiter’] ship_B_visits = [‘Saturn’, ‘Earth’, ‘Neptune’, ‘Mars’]

• Chuyển chúng thành Set.

• In ra tất cả các hành tinh mà ít nhất một tàu đã ghé thăm (phép hợp).

• In ra các hành tinh mà cả hai tàu đều đã ghé thăm (phép giao).

• In ra các hành tinh mà tàu A ghé thăm nhưng tàu B không ghé thăm (phép hiệu).

Coursera Quizzes (Kiểm tra nhanh):

Sau khi thực hành, hãy kiểm tra kiến thức của bạn với các bài tập từ Coursera:

Video: Worked exercise: Dictionaries (Coursera):

• Hãy theo dõi và thử tự làm lại bài tập được hướng dẫn trong video này.

SoloLearn / CodeLearn Quizzes (Kiểm tra và nâng cao):

Hãy tìm kiếm các bài quiz hoặc bài lab về Dictionary và Set trên SoloLearn hoặc CodeLearn để củng cố kiến thức.

Lab 10.1 (Set)

Lab 10.2 (Set.add)

Lab 10.3 (Set.remove)

4. Câu Chuyện HaivanStory & Liên Hệ Thực Tế: Hệ Thống AI Phân Tích Mạng Lưới Thiên Hà

Hãy tưởng tượng một hệ thống AI tiên tiến được giao nhiệm vụ phân tích mạng lưới giao thương giữa các hành tinh trong một liên minh thiên hà. Mỗi hành tinh có một ID duy nhất, và hệ thống cần theo dõi hàng triệu giao dịch mỗi ngày.

• Với Dictionary: AI có thể tạo ra một “từ điển” trade_routes_traffic, nơi mỗi khóa là ID của một hành tinh, và giá trị là tổng số lượt tàu đi/đến từ hành tinh đó trong ngày. Khi một giao dịch mới xảy ra, AI chỉ cần lấy ID hành tinh (khóa) và cập nhật số lượt giao dịch (giá trị) bằng cách sử dụng counts.get(planet_id, 0) + 1. Điều này hiệu quả hơn rất nhiều so với việc duyệt qua toàn bộ danh sách để tìm và cập nhật.

• Với Set: Giả sử AI cần xác định tất cả các chủng tộc ngoài hành tinh đã từng đặt chân đến Liên Minh, nhưng không quan tâm đến việc họ đến bao nhiêu lần. AI sẽ thu thập tất cả tên các chủng tộc từ các bản ghi đến và đưa vào một Set. Set sẽ tự động loại bỏ mọi tên trùng lặp, chỉ giữ lại danh sách các chủng tộc độc nhất. Sau đó, nếu có một chủng tộc mới đến, AI chỉ cần dùng add() để thêm vào Set, và nếu chủng tộc đó đã có, Set sẽ không thay đổi.

Trong khoa học dữ liệu, Dictionary và Set là công cụ không thể thiếu. Dictionary được dùng trong các mô hình học máy để lưu trữ các tham số, trọng số, hoặc kết quả phân tích tần suất. Set được dùng để lọc dữ liệu, tìm các giá trị độc nhất trong một cột dữ liệu, hoặc thực hiện các phép toán tập hợp để so sánh các nhóm dữ liệu. Từ việc xây dựng hệ thống gợi ý sản phẩm đến phát hiện gian lận, khả năng tổ chức và truy xuất dữ liệu nhanh chóng của Dictionary và Set là chìa khóa để AI hoạt động hiệu quả.

Bạn đang dần trang bị cho mình những công cụ mạnh mẽ để trở thành một “Kiến Tạo Sư Dữ Liệu” thực thụ, có khả năng biến những dòng thông tin hỗn loạn thành kho báu tri thức.

5. Tổng Kết & Hướng Đi Tiếp Theo: Nâng Cấp Kho Lưu Trữ

Trong bài học này, chúng ta đã cùng nhau mở khóa sức mạnh của hai cấu trúc dữ liệu cực kỳ quan trọng trong Python: DictionarySet. Chúng ta đã học được:

• Dictionary: Là một bộ sưu tập không có thứ tự của các cặp khóa-giá trị duy nhất, cho phép truy xuất dữ liệu cực kỳ nhanh chóng.

• Cách tạo Dictionary, truy cập giá trị bằng khóa, và sử dụng phương thức get() để truy cập an toàn.

• Cách duyệt qua Dictionary để lấy khóa, giá trị, hoặc cả hai.

• Ứng dụng của Dictionary trong việc đếm tần suất (counting pattern).

• Set: Là một tập hợp các phần tử không có thứ tự và không chứa các phần tử trùng lặp, lý tưởng cho việc quản lý các giá trị độc nhất.

• Cách tạo Set và sử dụng phương thức add() để thêm phần tử.

• Các phép toán tập hợp cơ bản như hợp (union), giao (intersection), và hiệu (difference).

Với Dictionary và Set, bạn đã nâng cấp đáng kể khả năng tổ chức và xử lý dữ liệu của mình. Bạn không chỉ có thể lưu trữ thông tin mà còn có thể truy xuất thông tin đó một cách thông minh, và lọc bỏ những yếu tố không cần thiết.

Trong bài học tiếp theo, chúng ta sẽ đi sâu vào một cấu trúc dữ liệu khác cũng rất quan trọng: Tuple. Tuple cũng là một chuỗi giống như List và String, nhưng nó có một đặc điểm thú vị sẽ làm thay đổi cách bạn nghĩ về dữ liệu. Hãy chuẩn bị tinh thần cho những khám phá mới nhé!

Lời khuyên: Hãy thử áp dụng Dictionary và Set vào các vấn đề nhỏ mà bạn gặp phải trong cuộc sống hàng ngày, ví dụ như lập danh sách mua sắm độc nhất, hoặc đếm số lần bạn sử dụng một từ nào đó. Điều này sẽ giúp bạn ghi nhớ và hiểu sâu hơn về các cấu trúc dữ liệu này.

6. Kêu Gọi Hành Động: Cùng Kiến Tạo Hệ Thống Tri Thức!

Bạn có bất kỳ câu hỏi nào về Dictionary và Set không? Hay bạn có ý tưởng ứng dụng nào cho hai cấu trúc dữ liệu này trong một kịch bản khoa học viễn tưởng thú vị?

Hãy chia sẻ suy nghĩ và câu hỏi của bạn trong phần bình luận bên dưới nhé! Chúng ta cùng nhau học hỏi và phát triển.

Đừng quên theo dõi HaivanStory Blog để không bỏ lỡ các bài học tiếp theo trong series “Học Python Cơ Bản Từ A đến Z” này! Hành trình xây dựng kỹ năng lập trình của bạn đang ngày càng trở nên vững chắc!

Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ nó với bạn bè và đồng nghiệp của mình nhé! Cùng nhau, chúng ta sẽ tạo ra một cộng đồng những người đam mê Python và khám phá vũ trụ tri thức rộng lớn!