Найти в Дзене
Властелин машин

Объединение простых структур данных в Python

Оглавление

Вы думаете, всё так просто? Да, всё просто. Но совсем не так... (Альберт Эйнштейн).

Зачастую при работе в Python возникает необходимость в объединении простых структур данных. Расскажу, как сделать это изящно для списков, множеств и словарей без нагромождения лишних строк кода.

Эффективные решения для объединения двух элементов и списка из таких элементов могут быть разные, поэтому для каждого типа данных рассмотрим оба кейса.

Множества

Для множества разницы нет. С помощью метода union мы можем перечислить имеющиеся множества или распаковать их список:

Более универсальным методом является использование функции chain модуля itertools, перебирающей элементы из всех составляющих списка:

-2

Списки

Для объединения двух списков можно использовать оператор "+"

-3

Для объединения списка списков воспользуйтесь все той же функцией chain:

-4

Еще можно обобщить способ объединения двух списков с reduce из модуля functools, которая принимает функцию, последовательно обрабатывающую элементы итератора и в первом параметре сохраняет результат предыдущего шага:

-5

Словари

Со словарями ситуация интереснее. Для объединения двух элементов в один можно распаковать их в новом словаре следующим образом:

-6

А вот в случае работы со списком чуть сложнее, обычное применение chain не поможет, так как итерация происходит по ключам:

-7

Но можно адаптировать входной параметр для применения с chain:

-8

Еще можно воспользоваться как и в случае со списками функцией reduce:

-9

Также для объединения списка словарей можно воспользоваться классом ChainMap, который как раз заменяет chain для случая словарей и действует аналогично:

-10

-11