Модуль collections

Модуль collections в Python — это стандартная библиотека, которая предоставляет специализированные контейнеры данных с дополнительной функциональностью по сравнению с базовыми типами данных (список, словарь, множество и т.д.). Он часто используется в автоматизации для удобной работы с коллекциями данных.

Основные структуры данных из collections:

  1. namedtuple — Создаёт кортеж с именованными полями. Удобен, когда нужно иметь кортеж с доступом к элементам по имени, а не только по индексу.

    from collections import namedtuple
    Point = namedtuple('Point', ['x', 'y'])
    p = Point(10, 20)
    print(p.x)  # 10
  2. deque — Двунаправленная очередь с быстрыми операциями добавления и удаления с обоих концов (очень эффективна для очередей и стэков).

    from collections import deque
    d = deque([1, 2, 3])
    d.appendleft(0)
    d.pop()
  3. Counter — Счётчик элементов в итерируемом объекте, удобно для подсчёта повторений.

    from collections import Counter
    c = Counter(['a', 'b', 'a', 'c', 'b', 'a'])
    print(c)  # Counter({'a': 3, 'b': 2, 'c': 1})
  4. OrderedDict (до Python 3.7 имел смысл, с 3.7 обычный dict уже сохраняет порядок вставки) — Словарь, который сохраняет порядок добавления элементов. Полезен, если важен порядок.

    from collections import OrderedDict
    od = OrderedDict()
    od['one'] = 1
    od['two'] = 2
  5. defaultdict — Словарь с значениями по умолчанию. При обращении к несуществующему ключу автоматически создаёт значение по заданной функции.

    from collections import defaultdict
    dd = defaultdict(int)  # по умолчанию 0
    dd['a'] += 1
    print(dd['a'])  # 1

Когда полезен в автоматизации?

  • Counter для подсчёта, например, количества успешных/неуспешных тестов.

  • defaultdict — удобен при агрегации данных по ключам (например, группировка логов по типу).

  • deque — для реализации очередей заданий, если нужна эффективная вставка/удаление.

  • namedtuple — для структурирования данных с именованными полями (например, результаты тестов).


Пример 1. Использование Counter для подсчёта результатов тестов

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


Пример 2. Использование defaultdict для группировки логов по уровню


Пример 3. Использование namedtuple для структурирования данных теста


Пример 4. Использование deque для очереди задач в тесте

Last updated

Was this helpful?