| | from typing import List, TypedDict |
| | from datetime import datetime |
| |
|
| | class TaskItem(TypedDict): |
| | task_id: str |
| | priority: str |
| | deadline_local: str |
| |
|
| | PRIORITY_ORDER = { |
| | "urgent": 0, |
| | "high": 1, |
| | "normal": 2, |
| | "low": 3, |
| | } |
| |
|
| | def _priority_key(task: TaskItem): |
| | pr = task.get("priority", "normal").lower() |
| | pr_rank = PRIORITY_ORDER.get(pr, 2) |
| | try: |
| | dt = datetime.fromisoformat(task.get("deadline_local", "")) |
| | except Exception: |
| | dt = datetime.max |
| | return (pr_rank, dt) |
| |
|
| | def sort_tasks(tasks: List[TaskItem]) -> List[TaskItem]: |
| | """Sort tasks by priority and deadline, highest priority first.""" |
| | return sorted(tasks, key=_priority_key) |
| |
|
| |
|
| | if __name__ == "__main__": |
| | sample = [ |
| | {"task_id": "T1", "priority": "normal", "deadline_local": "2025-01-14 21:00"}, |
| | {"task_id": "T2", "priority": "urgent", "deadline_local": "2025-01-14 10:00"}, |
| | {"task_id": "T3", "priority": "high", "deadline_local": "2025-01-14 09:30"}, |
| | {"task_id": "T4", "priority": "low", "deadline_local": "2025-01-16 09:00"}, |
| | ] |
| | for t in sort_tasks(sample): |
| | print(t) |
| |
|