Trong bài viết nhỏ này, tôi muốn chỉ cho bạn một tính năng nhỏ giúp quá trình phát triển của bạn hiệu quả hơn
Tôi sẽ chỉ cho bạn defaultdict[] là gì và sự khác biệt giữa dict[] và defaultdict[] với các ví dụ
Tại đây bạn có thể xem video về defaultdict[]
dict[] so với defaultdict[]Defaultdict là một từ điển giống như vùng chứa có trong các bộ sưu tập mô-đun. Defaultdict là một lớp con của lớp từ điển trả về một đối tượng giống như từ điển. Chức năng của cả hai từ điển và defaultdict gần như giống nhau ngoại trừ thực tế là defaultdict không bao giờ gây ra lỗi KeyError. Nó cung cấp một giá trị mặc định cho khóa không tồn tại
Cú pháp. defaultdict[default_factory]
Thông số.
- default_factory. Hàm trả về giá trị mặc định cho từ điển đã xác định. Nếu không có đối số này thì từ điển sẽ báo lỗi KeyError
Trên thực tế, bạn biết nếu bạn cố thêm một giá trị vào từ điển có khóa bị thiếu, bạn sẽ gặp lỗi KeyError
certificates = {}
students = [“Michael”, “George”, “Jesica”]
grades = [
{“History”: 50, “Mathematics”: 90, “Physics”: 70},
{“History”: 70, “Mathematics”: 85, “Physics”: 30},
{“History”: 60, “Mathematics”: 50, “Physics”: 60}
]for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> KeyError: ‘Michael’
Để tránh lỗi bạn có thể xây dựng câu lệnh “if” sau
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
Nhưng bạn có thể làm cho mã của mình rõ ràng nhất bằng cách sử dụng defaultdict[]
from collections import defaultdict
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
Trong ví dụ trên, chúng tôi đặt default_factory làm danh sách và nếu chúng tôi gọi khóa bị thiếu, chúng tôi sẽ nhận được một danh sách trống [] làm giá trị mặc định của khóa bị thiếu. Ngoài ra, chúng tôi có thể đặt bất kỳ loại dữ liệu nào. int, str, dict, float, set, tuple, danh sách
Hãy thử tất cả các loại dữ liệu này và kiểm tra kết quả
test_dict = defaultdict[int]
>>> 0test_dict = defaultdict[float]
>>> 0.0test_dict = defaultdict[dict]
>>> {}test_dict = defaultdict[list]
>>> []test_dict = defaultdict[tuple]
>>> []test_dict = defaultdict[set]
>>> set[]test_dict = defaultdict[str]
>>> ‘’
Ngoài ra, bạn có thể đặt giá trị mặc định của riêng mình. default_factory phải có thể gọi được để chúng ta có thể thực hiện tiếp theo
test_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
HOẶC
def test_function[]:
return “Default value by usual function”test_dict = defaultdict[test_function]
>>> ‘Default value by usual function’
NHƯNG nếu bạn không đặt default_factory thì nó sẽ là Không có và trong trường hợp này, nếu bạn cố gọi một khóa bị thiếu, bạn sẽ gặp lỗi KeyError
Trong hướng dẫn này, bạn sẽ tìm hiểu về các đối tượng defaultdict của Python, là một phần của thư viện
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
5. Đối tượng sẽ ghi đè hành vi từ điển mặc định là ném một # Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
6 khi bạn cố gắng truy cập một khóa không tồn tạiBạn sẽ có một cái nhìn tổng quan đầy đủ về defaultdict và nó khác với từ điển Python thông thường như thế nào. Bạn cũng sẽ học cách xử lý chung các lỗi bị thiếu trong Python. Cuối cùng, bạn sẽ học cách sử dụng đối tượng defaultdict và cách sử dụng nó để đếm dữ liệu, nhóm dữ liệu và tích lũy dữ liệu
Mục lục
- Từ điển Python xử lý các phím bị thiếu như thế nào?
- Mặc định của Python là gì?
- Cách tạo một defaultdict Python
- Xử lý các phím bị thiếu với Python defaultdict
- Đếm các mục trong danh sách bằng Python defaultdict
- Nhóm dữ liệu với Python defaultdict
- Tích lũy dữ liệu với Python defaultdict
- Phần kết luận
- Tài nguyên bổ sung
Từ điển Python xử lý các phím bị thiếu như thế nào?
Từ điển Python là cấu trúc dữ liệu quan trọng lưu trữ dữ liệu theo cặp
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
7. Từ điển được gọi là mảng kết hợp vì mỗi khóa được liên kết với một giá trị. Khi chúng tôi cố gắng truy cập giá trị của khóa trong từ điển Python, chúng tôi có thể truy cập trực tiếp giá trị của nó bằng cách sử dụng dấu ngoặc vuông xung quanh khóa của nóHãy xem cách truy cập giá trị của khóa từ từ điển Python
# Accessing a Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Name']]
# Returns: Nik
Bây giờ, hãy xem điều gì sẽ xảy ra khi chúng ta cố truy cập vào một khóa không tồn tại
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
Chúng ta có thể thấy rằng khi chúng ta cố gắng truy cập một khóa không tồn tại, Python sẽ tạo ra một
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
6. Điều này sẽ khiến chương trình của bạn gặp sự cố trừ khi lỗi được xử lý trực tiếpPython cung cấp một số cách để tránh điều này – hãy khám phá chúng tại đây
sử dụng. get[] để xử lý các khóa từ điển bị thiếu
Chúng ta có thể sử dụng phương pháp
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
9 từ điển để ngăn chặn một # Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
6 được nâng lên khi khóa từ điển không tồn tại. Nếu chúng ta cố gắng truy cập giá trị của khóa không tồn tại bằng phương thức # Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
9, thì phương thức này chỉ trả về giá trị for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
52. Hãy xem nó trông như thế nàofor index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
5Sử dụng try-ngoại trừ để xử lý các khóa từ điển bị thiếu
Tương tự như ví dụ trên, chúng ta có thể ngắt truy cập các giá trị từ điển của mình trong một khối thử-ngoại trừ. Điều này cho phép chúng tôi xử lý trực tiếp
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
6 được nâng lên khi khóa không tồn tại. Hãy xem nó trông như thế nàofor index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
8sử dụng. defaultvalue[] để xử lý các khóa từ điển bị thiếu
Từ điển Python cũng cung cấp một phương thức,
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
54, cho phép chúng ta đặt giá trị mặc định cho một khóa. Phương thức này đặt giá trị mặc định khi khóa không tồn tại và trả về giá trị đó. Hãy xem làm thế nào chúng ta có thể sử dụng nófrom collections import defaultdict0
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
Vấn đề với phương pháp này là chúng ta cần biết khóa mà chúng ta muốn tạo giá trị mặc định. Điều này vẫn đòi hỏi một lượng kế hoạch hợp lý và không tính đến các trường hợp bên lề
Các lựa chọn thay thế cho các phương pháp này là gì?
Sau khi đọc các tùy chọn này, bạn có thể nghĩ rằng bạn không cần bất cứ điều gì khác biệt hoặc một số lựa chọn thay thế phù hợp cho các phương pháp này là gì. Đây là nơi mà
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 xuất hiện. Nó cung cấp một cách rõ ràng, an toàn để cung cấp các giá trị mặc định cho bất kỳ khóa bị thiếu nào mà không cần phải tạo nó trước. Hãy cùng tìm hiểu về for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 và nhiều lợi ích của nóMặc định của Python là gì?
Python
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 là một lớp thuộc thư viện # Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
5, là một phần của thư viện Python chuẩn. Điều này có nghĩa là bạn không cần phải thực sự cài đặt bất cứ thứ gì để sử dụng nóChúng ta có thể sử dụng lớp bằng cách nhập nó vào chương trình của mình
from collections import defaultdict5
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
Lớp
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 là một lớp con của lớp for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
80 trong Python. Điều này có nghĩa là nó chia sẻ nhiều thuộc tính giống nhau của lớp từ điển, nhưng cũng sửa đổi và mở rộng một số chức năng của nóNhững thay đổi chính đối với lớp từ điển là
for index, value in enumerate[grades]:
55 ghi đè
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}for index, value in enumerate[grades]:
82, nghĩa là không có
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
6 nào được nâng lên khi khóa không tồn tại# Accessing a Missing Key's Value from a Python Dictionary data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33} print[data['Hobbies']] # Raises: KeyError: 'Hobbies'
- Nó thêm một biến khởi tạo bắt buộc,
for index, value in enumerate[grades]:
84, phải được cung cấp
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
Điều này có ý nghĩa gì với bạn? . Hàm có thể gọi
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
84 có thể nhận bất kỳ hàm có thể gọi hợp lệ nào [chẳng hạn như for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
87, for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
88, v.v. ] hoặc for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
52 và sẽ sử dụng loại đó làm loại mặc định để tạo khi không có khóa nào tồn tạiTrong phần này, bạn đã tìm hiểu lớp Python
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 là gì và nó khác với từ điển Python thông thường như thế nào. Trong phần tiếp theo, bạn sẽ bắt đầu làm việc với các đối tượng này để xử lý dữ liệu bị thiếu tốt hơn và mở rộng khả năng làm việc với từ điển của bạnCách tạo một defaultdict Python
Trong phần này, bạn sẽ tìm hiểu cách tạo một đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 bằng cách sử dụng mô-đun # Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
5 trong Python. Như hình trên chúng ta có thể import class dễ dàng mà không cần lo cài đặt. Điều này là do mô-đun là một phần của thư viện chuẩn và sẽ được cài đặt cùng với PythonHãy xem cách chúng ta có thể tạo một
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55test_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
1Ở đây, chúng tôi đã tạo một
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 được gọi là mặc định. Để tạo thành công từ điển, chúng ta cần chuyển vào một giá trị có thể gọi hợp lệ. Các cuộc gọi này là cách tạo đối tượng, chẳng hạn như số nguyên, danh sách, v.v. Điều quan trọng là sử dụng khả năng gọi được, thay vì chức năngtest_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
3Ta có thể thấy khi truyền vào hàm
from collections import defaultdict05, chương trình sẽ tăng một giá trị
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
from collections import defaultdict06
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
Bây giờ chúng ta có thể sử dụng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 theo nhiều cách giống như chúng ta sử dụng từ điển Python bình thường. Ví dụ: chúng ta có thể gán một cặp khóa-giá trị mới cho từ điểntest_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
7Trong phần này, bạn đã học cách tạo một
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 bằng Python và cách thêm các cặp khóa-giá trị vào đó. Trong phần tiếp theo, bạn sẽ học cách sử dụng các từ điển này để xử lý các khóa bị thiếuXử lý các phím bị thiếu với Python defaultdict
Trong phần này, bạn sẽ tìm hiểu cách xử lý các khóa bị thiếu với Python
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55. Trước đây, bạn đã học được rằng khi tạo một defaultdict mới, bạn phải chuyển vào một loại giá trị mặc định mới. Điều này cho phép chúng tôi xử lý dữ liệu bị thiếu khi cố gắng truy cập một khóa bị thiếu. Hãy xem nó trông như thế nàodef test_function[]:0
return “Default value by usual function”test_dict = defaultdict[test_function]
>>> ‘Default value by usual function’
Chúng ta có thể thấy từ ví dụ trên rằng chúng ta có thể truy cập vào một khóa không tồn tại và giá trị 0 được trả về. Chúng ta có thể chuyển các callables cho
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
87, for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
88, from collections import defaultdict52 và
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
from collections import defaultdict53. Trong phần tiếp theo, bạn sẽ học cách sử dụng đối tượng
certificates = defaultdict[list]
for index, value in enumerate[grades]:
certificates[students[index]].append[value]
>>> defaultdict[, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]}]
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 để đếm các mục trong danh sáchĐếm các mục trong danh sách bằng Python defaultdict
Một trong những cách sử dụng sáng tạo cho đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 là khả năng đếm các mục một cách hiệu quả trong một lần lặp và trả lại số đếm trong từ điển. Trước khi chúng ta đi sâu vào cách triển khai điều này với đối tượng for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55, hãy xem cách chúng ta có thể triển khai điều này với một từ điển thông thường# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
0Trong đoạn mã trên, chúng ta cần bao gồm câu lệnh if-else để giải thích cho trường hợp khóa không tồn tại trong từ điển của chúng ta
Chúng ta có thể đơn giản hóa điều này rất nhiều bằng cách sử dụng đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55. Chúng tôi có thể khởi tạo một số nguyên làm khóa mặc định của mình và chúng tôi có thể tăng các khóa của mình một cách an toàn, ngay cả khi chúng không tồn tại trước đó. Hãy xem cái này trông như thế nào# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
1Những gì chúng tôi đã làm ở đây là khởi tạo một đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55, chuyển vào giá trị số nguyên có thể gọi được. Điều này có nghĩa là nếu khóa không tồn tại thì giá trị sẽ được gán 0. Do đó, khi chúng tôi gặp một khóa không tồn tại, chúng tôi có thể tăng giá trị của nó lên 1 một cách an toàn. Mã này sạch hơn đáng kể so với cách triển khai ngây thơ của chúng tôi bằng cách sử dụng từ điển thông thườngNhóm dữ liệu với Python defaultdict
Chúng ta có thể sử dụng đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 để nhóm dữ liệu dựa trên các cấu trúc dữ liệu khác. Với điều này, chúng ta có thể lặp lại một số đối tượng, chẳng hạn như danh sách các bộ dữ liệu, một từ điển khác hoặc một tập hợp các danh sách để nhóm dữ liệu theo những cách có ý nghĩaHãy xem một ví dụ. Nếu chúng tôi có một từ điển tên của mọi người và quê hương của họ, chúng tôi có thể tạo một từ điển chứa vị trí của chúng tôi dưới dạng khóa và những người từ vị trí đó dưới dạng danh sách. Điều này cho phép chúng tôi lấy một bảng như bên dưới và chuyển đổi nó thành một từ điển với vị trí của mọi người và những người sống ở đó
NgườiQuê hươngNikTorontoKateTorontoEvanLondonKyraNew YorkJaneNew YorkBảng giá trị ban đầu của chúng tôiChúng ta có thể biến bảng này thành như sau
HometownPeopleTorontotest_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
10Londontest_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
11New Yorktest_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
12Cấu trúc dữ liệu kết quảTrước khi chúng ta xem cách triển khai điều này với đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55, hãy xem cách thực hiện điều này với từ điển Python thông thường# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
2Chúng ta có thể thấy rằng đây là một chút phức tạp hơn so với ví dụ trước của chúng tôi. Rất may,
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 làm cho điều này dễ dàng hơn nhiều. Bởi vì chúng tôi có thể đặt giá trị mặc định thành danh sách trống, chúng tôi có thể xóa câu lệnh test_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
15. Hãy xem cách thức hoạt động của nó# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
3Chúng ta có thể thấy ví dụ này dễ hiểu hơn bao nhiêu vì chúng ta không cần lo lắng về việc xử lý lỗi.
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 của chúng tôi sẽ khởi tạo một danh sách trống mỗi khi khóa không tồn tại. Do đó, chúng ta có thể dễ dàng thêm vào giá trị của khóa mà không cần lo lắng về việc test_dict = defaultdict[lambda: “Default value by lambda”]
test_dict[missing_key]
>>> ‘Default value by lambda’
17 bị némTích lũy dữ liệu với Python defaultdict
Trong phần cuối cùng này, bạn sẽ học cách tích lũy dữ liệu với Python
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55. Ví dụ này khá giống với ví dụ đếm, ngoại trừ chúng ta sẽ khởi tạo một số float làm giá trị mặc định. Hãy tưởng tượng rằng bạn đang theo dõi chi tiêu của mình trong các danh mục khác nhau và muốn cộng tổng số tiền chi tiêu cho các danh mục nàyDữ liệu của bạn được lưu trữ trong một danh sách các bộ dữ liệu, trong đó giá trị đầu tiên là danh mục và giá trị thứ hai là số tiền đã chi tiêu. Chúng ta hãy xem làm thế nào chúng ta có thể làm cho công việc này
# Accessing a Missing Key's Value from a Python Dictionary
data = {'Name': 'Nik', 'Location': 'Toronto', 'Age': 33}
print[data['Hobbies']]
# Raises: KeyError: 'Hobbies'
4Chúng ta có thể thấy cách tiếp cận này gần giống với ví dụ đầu tiên của chúng ta, ngoại trừ việc chúng ta đang truy cập giá trị của một mục thay vì chỉ đếm một giá trị
Phần kết luận
Trong hướng dẫn này, bạn đã học về đối tượng
for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 trong Python. Bạn đã bắt đầu bằng cách tìm hiểu cách từ điển Python phản hồi với các khóa bị thiếu và cách bạn có thể xử lý các khóa bị thiếu này mà không làm hỏng chương trình của bạn. Sau đó, bạn đã học cách sử dụng Python for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 để cung cấp các giá trị mặc định. Cuối cùng, bạn đã học được ba ví dụ phức tạp về cách sử dụng đối tượng for index, value in enumerate[grades]:
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append[value]
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}
55 để đếm, nhóm và tích lũy dữ liệu