Phân tích Nhật ký Máy chủ với collections: Counter và defaultdict
Viết hàm aggregate_server_logs(logs: list[str]) -> dict:
Tiến độ của tôi ở bài này
Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: collections module, dict manipulation.
Nội dung đề bài
Mục tiêu kiến thức
- Sử dụng collections.Counter để thống kê tần suất phần tử.
- Sử dụng collections.defaultdict tự động khởi tạo danh sách / tập hợp cho key mới.
Mô tả bài toán
Viết hàm aggregate_server_logs(logs: list[str]) -> dict: Mỗi dòng log có định dạng chuẩn phân cách bằng khoảng trắng: "[LEVEL] [IP] [ENDPOINT] [STATUS_CODE]" Ví dụ: "INFO 192.168.1.1 /api/v1/users 200"
Yêu cầu trích xuất:
- level_counts: dict thống kê số lần xuất hiện của từng LEVEL (ví dụ INFO, ERROR, WARNING).
- endpoint_counts: dict thống kê số lượt truy cập của từng ENDPOINT.
- Trả về:
{"level_counts": dict, "endpoint_counts": dict}.
Input
- Các tham số truyền vào hàm/lớp aggregate_server_logs hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp aggregate_server_logs hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
aggregate_server_logs(logs=['INFO 192.168.1.1 /home 200', 'ERROR 192.168.1.2 /api/login 401', 'INFO 192.168.1.1 /home 200'])
Output
{'INFO': 2, 'ERROR': 1}
Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
