Mapping списков, словарей и кортежей в Python

Mapping в Python означает применение операции для каждого элемента итерируемого объекта, например, списка. В русских текстах помимо mapping может встречаться “маппинг”, “сопоставление” и “отображение”.

Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU

Mapping в Python

Mapping означает преобразование группы значений в другую группу значений.

В Python для отображения можно использовать встроенную функцию map(), которая возвращает объект map. Этот объект является результатом применения какой-либо операции к элементам итерируемого объекта.

Объект map можно легко преобразовать обратно в список, например, вызвав для него функцию list().

Синтаксис использования функции map():

map (operation, iterable)

Здесь operation – это функция или лямбда-функция (в зависимости от того, что вам больше нравится). iterable – это итерируемый объект, к элементам которого применяется operation.

Mapping списков

В Python отобразить можно любой итерируемый объект, а значит, и список тоже.

Например, давайте возведем в квадрат список чисел. Этот подход в качестве функции отображения использует лямбда-функцию. Если вы не знакомы с лямбдами, рекомендуем статью “Лямбда-функции в Python – объяснение с примерами”.

numbers =  [1, 2, 3, 4, 5]
squared_nums = map(lambda x: x **  2, numbers)
print(list(squared_nums))

# Вывод:
# [1, 4, 9, 16, 25]

Вот тот же пример с обычной функцией:

numbers =  [1, 2, 3, 4, 5]
def square(number):
    return number ** 2
squared_nums = map(square, numbers)
print(list(squared_nums))

# Вывод:
# [1, 4, 9, 16, 25]

Здесь функция square() применяется для каждого элемента списка чисел. Обратите внимание, что в функция map() автоматически передает в функцию square все элементы списка по очереди.

Mapping словарей

При помощи функции map() можно отображать и словари.

Например, давайте отобразим data так, чтобы первые буквы строковых значений в парах ключ-значение стали заглавными:

data = {
    "name": "jack",
    "address": "imaginary street",
    "education": "mathematican"
}
def capitalize(word):
    return word.capitalize()
data_map = map(lambda pair: (pair[0], capitalize(pair[1])), data.iteritems())
data = dict(data_map)
print(dict(data))

# Вывод:
# {'name': 'Jack', 'address': 'Imaginary street', 'education': 'Mathematican'}

Здесь довольно много строк кода, поэтому давайте разберем подробнее:

  • У нас есть data – словарь, содержащий пары ключ-значение. Значения сохранены в нижнем регистре, а мы хотим сделать первые буквы заглавными.
  • Функция capitalize() принимает строку и возвращает ее копию, в которой первый символ переведен в верхний регистр.
  • data_map – это объект map. Он создается путем применения функции capitalize() для каждого значения каждой пары ключ-значение в data.
  • Чтобы преобразовать data_map обратно в словарь, мы используем встроенную функцию dict().

Mapping кортежей

В Python можно также отображать кортежи. Тут все аналогично отображению списка.

Например, давайте создадим кортеж, содержащий имена из другого кортежа, с переводом первых букв имен в верхний регистр:

names = ("jamie", "jane", "jack")
def capitalize(word):
    return word.capitalize()
capitalized_names = map(capitalize, names)
print(tuple(capitalized_names))

# Вывод:
# ('Jamie', 'Jane', 'Jack')

Заключение

В Python для преобразования одной группы значений в другую можно использовать mapping (отображение). Для этого применяется встроенная функция map(). Эта функция применяет переданную ей в качестве аргумента функцию к каждому элементу группы значений.

Спасибо за внимание и успешного кодинга!

Перевод статьи Artturi Jalli “Mapping Python Lists, Dicts, and Tuples”.