Решение 1. Популярные слова
from collections import Counter
def popular_words(limit, *texts):
words = []
for text in texts:
words.extend(text.lower().replace(".", "").replace(",", "").split())
return Counter(words).most_common(limit)
print(popular_words(5, "This is text.", "This text repeats text."))Counter получает нормализованные слова из всех переданных строк.
Решение 2. Группировка задач
from collections import defaultdict
def group_tasks(tasks):
result = defaultdict(list)
for task, category in tasks.items():
result[category].append(task)
return dict(result)
print(group_tasks({"task1": "работа", "task2": "учёба", "task3": "работа"}))Категория становится ключом, список задач накапливается автоматически.
Решение 3. Поиск задач
def find_tasks_by_category(tasks, category):
return [task for task, task_category in tasks.items() if task_category == category]
tasks = {"task1": "работа", "task2": "учёба", "task3": "развлечения", "task4": "работа", "task5": "учёба"}
print(find_tasks_by_category(tasks, "учёба"))List comprehension читает все пары и оставляет задачи нужной категории.
Решение 4. Очередь задач с приоритетом
from collections import OrderedDict
def sort_priority_queue(tasks):
priority = {"высокий": 0, "средний": 1, "низкий": 2}
ordered_items = sorted(tasks.items(), key=lambda item: priority[item[1]])
tasks.clear()
tasks.update(ordered_items)
return tasks
tasks = OrderedDict({"task1": "низкий", "task2": "средний", "task3": "высокий", "task4": "низкий", "task5": "высокий"})
print(sort_priority_queue(tasks))clear()/update() сохраняют тот же объект OrderedDict, но переставляют элементы.
Решение 5. Посещения страниц
from collections import defaultdict
def count_page_visits(pages):
visits = defaultdict(int)
for page in pages:
visits[page] += 1
return dict(visits)
pages = ["home", "about", "home", "products", "home", "contact", "products"]
print(count_page_visits(pages))defaultdict(int) стартует отсутствующий счётчик с нуля.
Решение 6. Слова по длине
from collections import defaultdict
def group_words_by_length(words):
result = defaultdict(list)
for word in words:
result[len(word)].append(word)
return dict(result)
words = ["apple", "banana", "kiwi", "grape", "orange", "peach"]
print(group_words_by_length(words))Длина слова является ключом группировки.
Решение 7. Глобальный счётчик
counter = 0
def increment_counter():
global counter
counter += 1
increment_counter()
increment_counter()
print(f"Вызовов функции: {counter}")global нужен, потому что функция присваивает новое значение переменной counter.
Решение 8. LRU-очередь
from collections import OrderedDict
def update_lru_queue(tasks, new_tasks, max_size):
queue = OrderedDict.fromkeys(tasks)
for task in new_tasks:
if task in queue:
queue.move_to_end(task)
else:
queue[task] = None
while len(queue) > max_size:
queue.popitem(last=False)
return list(queue)
print(update_lru_queue(["task1", "task2", "task3", "task4", "task5", "task6"], ["task4", "task1", "task7", "task2"], 4))OrderedDict хранит порядок использования: слева старые элементы, справа новые.