6.1 Sử dụng enumerate()
Chúng ta đã thảo luận về cách làm việc với vòng lặp qua keys
, values
và items
trong từ điển. Bây giờ, chúng ta sẽ tìm hiểu cụ thể hơn về hàm enumerate()
.
Hàm enumerate()
rất hữu ích để duyệt qua các phần tử của từ điển, cho phép truy cập cả chỉ số, khóa và giá trị.
Dưới đây là một vài ví dụ sử dụng enumerate()
với từ điển:
Duyệt qua khóa và giá trị của từ điển với chỉ số
Bạn có thể sử dụng enumerate()
để duyệt qua khóa và giá trị của từ điển, đồng thời nhận được chỉ số.
# Từ điển với dữ liệu về một người
person = {"name": "Alice", "age": 25, "city": "New York"}
# Duyệt qua khóa và giá trị của từ điển với chỉ số
for index, (key, value) in enumerate(person.items()):
print(f"Chỉ số: {index}, Khóa: {key}, Giá trị: {value}")
# In ra chỉ số, khóa và giá trị của từng phần tử trong từ điển
Output:
Chỉ số: 0, Khóa: name, Giá trị: Alice
Chỉ số: 1, Khóa: age, Giá trị: 25
Chỉ số: 2, Khóa: city, Giá trị: New York
Chuyển đổi giá trị của từ điển sử dụng chỉ số
Bạn có thể sử dụng enumerate()
để thay đổi giá trị của từ điển dựa trên chỉ số của chúng.
# Từ điển gốc
person = {"name": "Alice", "age": 25, "city": "New York"}
# Từ điển mới với chỉ số trong giá trị
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# Gán giá trị trong từ điển chỉ số dưới dạng chuỗi
print(indexed_person)
# In ra từ điển với các chỉ số được thêm vào giá trị
Output:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
Sử dụng enumerate()
để tạo từ điển mới
Bạn có thể sử dụng enumerate()
để tạo một từ điển mới, nơi các chỉ số sẽ là khóa.
# Từ điển gốc
person = {"name": "Alice", "age": 25, "city": "New York"}
# Từ điển mới, nơi các chỉ số được sử dụng làm khóa
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# In ra từ điển mới với các chỉ số làm khóa
Output:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 Dictionary comprehensions
Chúng ta đã sử dụng List Comprehensions để tạo danh sách và Set Comprehensions để tạo tập hợp. Tương tự, bạn có thể sử dụng cú pháp comprehension để tạo các từ điển. Dictionary Comprehensions (dictionary comprehension) cho phép viết mã ngắn gọn và dễ đọc hơn khi tạo từ điển.
Cú pháp cơ bản của dictionary comprehension trông như sau:
{biểu_thức1: biểu_thức2 for biến in chuỗi if điều_kiện}
trong đó
-
biến
— biến nhận giá trị của từng phần tử từ đối tượng có thể lặp. -
chuỗi
— đối tượng có thể lặp (ví dụ: danh sách, tuple, chuỗi), mà biến đi qua. -
biểu_thức1
— biểu thức để tạo khóa của từ điển. Thường phụ thuộc vào biến. -
biểu_thức2
— biểu thức để tạo giá trị của từ điển. -
điều_kiện
— (tùy chọn) điều kiện cần thỏa mãn để bao gồm phần tử vào từ điển.
Ví dụ 1:
Tạo từ điển với bình phương của các số
# Tạo từ điển, nơi khóa là các số từ 1 đến 5 và giá trị là bình phương của chúng
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # Output: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
Ví dụ 2:
Tạo từ điển từ danh sách các tuple
# Danh sách các tuple chứa cặp khóa-giá trị
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# Tạo từ điển từ danh sách các tuple
person = {key: value for key, value in pairs}
print(person) # Output: {'name': 'Alice', 'age': 25, 'city': 'New York'}
Ví dụ 3:
Lọc các phần tử khi tạo từ điển
# Tạo từ điển, nơi khóa là các số từ 1 đến 10, và giá trị là bình phương của chúng
# Chỉ cho các số chẵn
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # Output: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
Ví dụ 4:
Chuyển đổi các phần tử khi tạo từ điển
# Danh sách các chuỗi
words = ["apple", "banana", "cherry"]
# Tạo từ điển, nơi khóa là các chuỗi và giá trị là độ dài của chúng
word_lengths = {word: len(word) for word in words}
print(word_lengths) # Output: {'apple': 5, 'banana': 6, 'cherry': 6}
Dictionary comprehensions lồng nhau
# Danh sách các danh sách với cặp khóa-giá trị
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# Tạo từ điển từ danh sách lồng nhau
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
Cách kết hợp
Có thể kết hợp các cách tạo từ điển khác nhau cho các trường hợp phức tạp hơn.
# Kết hợp nhiều từ điển lại thành một
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # Output: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
Sử dụng toán tử **
trước tên từ điển cho phép giải nén các phần tử của nó, như thể chúng được liệt kê liên tiếp. Vì vậy, biểu thức {**dict1, **dict2}
thực chất là sự kết hợp các phần tử của cả hai từ điển.
GO TO FULL VERSION