1.1 Dictionary và các thuộc tính của nó
Dictionary (dictionary) trong Python là bộ sưu tập có trật tự của các cặp key-value, trong đó mỗi key là duy nhất. Dictionaries là một trong những kiểu dữ liệu linh hoạt và mạnh mẽ nhất trong Python, được sử dụng để lưu trữ và quản lý dữ liệu. Chúng ta sẽ sử dụng chúng rất thường xuyên, gần như thường xuyên như danh sách. Sắp tới bạn sẽ thấy điều đó :)
Các thuộc tính chính của dictionaries:
1. Key duy nhất
Mỗi key trong dictionary phải là duy nhất. Nếu một cặp key-value với cùng key đã tồn tại được thêm vào dictionary, giá trị cũ sẽ bị thay thế bởi giá trị mới. Ví dụ, nếu bạn muốn lưu trữ dữ liệu về các sinh viên và sử dụng mã sinh viên của họ làm key:
students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students) # Sẽ in ra: {'123': 'Mike', '124': 'Alice'}
2. Có trật tự
Quan trọng!
Trước phiên bản Python 3.7, dictionaries là bộ sưu tập không có trật tự, tức là không đảm bảo thứ tự của các phần tử. Từ Python 3.7, dictionaries giữ trật tự theo thứ tự thêm các phần tử, nhưng điều này không bắt buộc là một phần của đặc tả ngôn ngữ cho đến phiên bản Python 3.8, khi nó trở thành tiêu chuẩn.
Đó là câu chuyện đã 5 năm trước. Chúng ta đang học Python dựa trên phiên bản 3.12 do đó bạn cứ thoải mái xem dictionary như
bộ sưu tập có trật tự của các phần tử
.
3. Khả năng thay đổi
Dictionaries có thể thay đổi, nghĩa là bạn có thể thêm, thay đổi hoặc xóa các phần tử sau khi đã tạo dictionary. Ví dụ, thêm địa chỉ của sinh viên:
student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student) # Sẽ in ra: {'name': 'John', 'age': 20, 'address': '123 Main St'}
4. Hiệu quả
Dictionaries được tối ưu hóa cho việc tìm kiếm, thêm và xóa các cặp key-value nhanh. Trung bình, các thao tác tìm kiếm, thêm và xóa được thực hiện trong thời gian cố định, O(1). Khái niệm về độ phức tạp của thuật toán bạn sẽ biết sau, khi chúng ta học chủ đề «Thuật toán và cấu trúc dữ liệu».
5. Key và giá trị
Key trong dictionary có thể là bất kỳ kiểu dữ liệu không thay đổi nào như chuỗi, số hoặc tuple. Giá trị có thể là bất kỳ kiểu dữ liệu nào, bao gồm cả các dictionaries khác.
6. Phương thức truy cập và thay đổi
Dictionaries hỗ trợ các phương thức khác nhau để truy cập các phần tử, thêm, thay đổi và xóa các cặp key-value. Một số phương thức này bao gồm get()
, keys()
, values()
,
items()
, update()
, pop()
, và nhiều hơn nữa. Chi tiết hơn trong các bài giảng tiếp theo.
7. Duyệt qua các phần tử
Bạn có thể duyệt qua các key, giá trị hoặc cặp key-value trong dictionary bằng cách sử dụng vòng lặp. Điều này giúp dễ dàng thực hiện các thao tác trên các phần tử dictionary. Ví dụ:
student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
print(f"{key}: {value}")
Kết quả sẽ là:
name: John
age: 20
address: 123 Main St
8. Khả năng hash của key
Key trong dictionary phải có khả năng hash (từ hash). Điều này có nghĩa là key phải có giá trị hash không thay đổi trong suốt vòng đời của chúng. Giá trị hash được lấy bằng cách sử dụng hàm hash, một thuật toán chuyển đổi dữ liệu đầu vào có độ dài tùy ý thành một giá trị đầu ra có độ dài cố định. Đó chính là cái được gọi là giá trị hash hoặc mã hash. Các kiểu dữ liệu không thay đổi, chẳng hạn như chuỗi, số và tuple, là có khả năng hash và có thể được sử dụng làm key.
Chúng ta sẽ học chi tiết hơn về hàm hash và khả năng hash trong chủ đề «Thuật toán và cấu trúc dữ liệu».
1.2 Tạo dictionary sử dụng {}
Dictionaries (dictionaries) trong Python có thể được tạo theo nhiều cách khác nhau. Dưới đây là các cách khác nhau để tạo một đối tượng dictionary với các ví dụ:
Sử dụng dấu ngoặc nhọn {}
Cách phổ biến nhất để tạo một dictionary là sử dụng dấu ngoặc nhọn với các cặp key-value được phân tách bằng dấu phẩy. Bản thân cặp key-value được phân cách bằng dấu hai chấm.
# Tạo một dictionary trống
empty_dict = {}
# Tạo dictionary với các phần tử
person = {
"name": "John",
"age": 30,
"city": "New York"
}
print(type(person))
print(person)
Quan trọng!
Tạo dictionary tương tự như tạo set. Thực ra, có thể xem dictionary như một set với các keys được gán giá trị.
Nếu trong dấu ngoặc nhọn chỉ liệt kê các "keys", thì set sẽ được tạo, còn nếu sau keys có dấu hai chấm và giá trị được chỉ định, thì dictionary sẽ được tạo. Dấu ngoặc nhọn trống - luôn là dictionary.
# Tạo một dictionary trống
empty_dict = {}
# Tạo một set với các phần tử
unique_items = {
"name",
"age",
"city"
}
print(type(unique_items))
print(unique_items)
1.3 Tạo dictionary sử dụng hàm dict()
Hàm dict()
có thể được sử dụng để tạo một dictionary từ một chuỗi các cặp key-value, cũng như từ các đối số được đặt tên.
Ví dụ với chuỗi các cặp key-value:
# Tạo dictionary từ danh sách các tuple
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)
Ví dụ với các đối số được đặt tên. Không cần dấu ngoặc thêm ở đây:
# Tạo dictionary với các đối số được đặt tên
person = dict(name="John", age=30, city="New York")
print(person)
Sử dụng phương thức dict.fromkeys()
Phương thức fromkeys()
tạo dictionary với các keys đã cho và giá trị mặc định.
# Tạo dictionary với các keys và giá trị mặc định
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value)
print(person)
Dictionary sẽ có ba keys, nhưng tất cả chúng sẽ chứa một giá trị.
1.4 Tạo dictionary từ các biến có sẵn
Có thể tạo dictionaries bằng cách sử dụng các biến làm keys và values.
# Tạo dictionary từ các biến
name = "John"
age = 30
city = "New York"
person = {"name": name, "age": age, "city": city}
print(person)
1.5 Sử dụng generators dictionary
Generators dictionary cho phép tạo dictionaries thông qua các cấu trúc ngắn gọn và súc tích, tương tự như generators list.
# Tạo dictionary bằng cách sử dụng generator dictionary
squares = {x: x**2 for x in range(1, 6)}
print(squares)
1.6 Truy cập giá trị trong dictionary
Để lấy giá trị theo key, sử dụng cú pháp []
:
# Truy cập giá trị trong dictionary
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # Sẽ in ra: John
Quan trọng!
Nếu key không được tìm thấy, sẽ xảy ra lỗi KeyError
. Để tránh điều này, bạn có thể sử dụng phương thức get()
, phương thức này trả về giá trị theo key nếu key tồn tại, hoặc None
(hoặc giá trị mặc định khác), nếu key không được tìm thấy.
# Sử dụng phương thức get() để truy cập giá trị trong dictionary
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name")) # Sẽ in ra: John
print(person.get("address", "Không tìm thấy địa chỉ")) # Sẽ in ra: Không tìm thấy địa chỉ
1.7 Thay đổi giá trị trong dictionary
Giá trị trong dictionary có thể được thay đổi bằng cách truy cập chúng bằng key và gán giá trị mới.
# Thay đổi giá trị trong dictionary
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person) # Sẽ in ra: {'name': 'John', 'age': 31, 'city': 'New York'}
1.8 Xóa phần tử từ dictionary
Các phần tử có thể được xóa bằng cách sử dụng toán tử del
hoặc phương thức pop()
.
# Xóa phần tử bằng del
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person) # Sẽ in ra: {'name': 'John', 'city': 'New York'}
# Xóa phần tử bằng pop()
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person) # Sẽ in ra: {'name': 'John', 'city': 'New York'}
print(age) # Sẽ in ra: 30
1.9 Kiểm tra sự hiện diện của key trong dictionary
Bạn có thể kiểm tra xem một key có tồn tại trong dictionary hay không bằng cách sử dụng toán tử in
.
# Kiểm tra sự hiện diện của key trong dictionary
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person) # Sẽ in ra: True
print("address" in person) # Sẽ in ra: False
1.10 Duyệt qua các phần tử dictionary
Bạn có thể duyệt qua các keys, values hoặc các cặp key-value trong dictionary:
# Duyệt qua các keys trong dictionary
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key)
# Duyệt qua các values trong dictionary
for value in person.values():
print(value)
# Duyệt qua các cặp key-value trong dictionary
for key, value in person.items():
print(f"{key}: {value}")
1.11 Ví dụ về sử dụng dictionaries trong các bài toán thực tế
Hãy cùng xem qua một số ví dụ từ cuộc sống thực, nơi mà sử dụng dictionaries có thể hữu ích:
Ví dụ 1: Đếm tần suất từ trong văn bản
Giả sử chúng ta có một văn bản và muốn đếm xem mỗi từ xuất hiện bao nhiêu lần trong văn bản đó.
text = "hello world hello"
word_count = {}
for word in text.split():
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # Sẽ in ra: {'hello': 2, 'world': 1}
Ví dụ 2: Lưu trữ dữ liệu về sinh viên
Chúng ta có thể sử dụng dictionary để lưu trữ dữ liệu về sinh viên, trong đó các key là mã sinh viên của họ, và các values là dữ liệu về họ.
students = {
"123": {"name": "John", "age": 20, "major": "Computer Science"},
"124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"]) # Sẽ in ra: John
Ví dụ 3: Danh bạ điện thoại
Dictionaries có thể được sử dụng để tạo một danh bạ điện thoại đơn giản, nơi các key là tên, và các values là số điện thoại.
phone_book = {
"John": "123-456-7890",
"Alice": "987-654-3210"
}
print(phone_book["Alice"]) # Sẽ in ra: 987-654-3210
GO TO FULL VERSION