💻 Примеры

⚡ Кратко: примеры

Counter подходит для популярных слов.

defaultdict(list) удобно группирует задачи и слова.

Поиск задач по категории можно сделать фильтрацией items().

OrderedDict позволяет менять порядок задач без создания новой очереди.

defaultdict(int) подходит для подсчёта посещений страниц.

global нужен только в задаче со счётчиком вызовов, но в проектах лучше избегать такой зависимости.

LRU-очередь можно моделировать через OrderedDict и move_to_end().

Каждое решение лучше оформлять функцией с понятными параметрами.

Топ-3 ошибки: не нормализовать регистр слов; создавать новую очередь вместо изменения исходной; забыть удалить старые элементы при превышении LRU-лимита.

Популярные слова

Несколько строк объединяются, приводятся к нижнему регистру и считаются через Counter.

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."))

Группировка задач

Категория становится ключом, задачи - списком значений.

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": "работа"}))

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))