str.format_map()
Метод format_map() форматирует строку, подставляя значения из переданного отображения (например, словаря) по именованным placeholders. В отличие от str.format(**mapping), словарь не распаковывается — это позволяет использовать пользовательские классы-словари (например, с собственной реализацией __missing__).
Сигнатура
str.format_map(mapping)
Параметры
mapping— объект, поддерживающий доступ по ключу (dictили его подкласс, либо любой класс с методом__getitem__).
Возвращаемое значение
Новая строка (str) с подставленными значениями.
Примеры использования
Пример 1. Базовое использование со словарём.
data = {"name": "Arduino UNO", "price": 8500}
print("Товар: {name}, цена: {price} тг".format_map(data))
Товар: Arduino UNO, цена: 8500 тг
Пример 2. Несколько вхождений одного ключа.
info = {"board": "ESP32"}
tpl = "{board} — это {board}!"
print(tpl.format_map(info))
ESP32 — это ESP32!
Пример 3. Подкласс dict с __missing__.
Главное преимущество format_map() — возможность задать поведение для отсутствующих ключей:
class Default(dict):
def __missing__(self, key):
return "<нет>"
tpl = "Имя: {name}, статус: {status}"
print(tpl.format_map(Default(name="Иван")))
Имя: Иван, статус: <нет>
Пример 4. Параметры подключения устройства.
params = {"port": "COM3", "baud": 9600}
tpl = "Подключение к {port} на скорости {baud} бод"
print(tpl.format_map(params))
Подключение к COM3 на скорости 9600 бод
Пример 5. Разница с format(**dict).
При format(**d) словарь распаковывается в kwargs (только строковые ключи и копия), а format_map(d) работает с объектом напрямую:
d = {"x": 1, "y": 2}
print("{x}+{y}".format(**d))
print("{x}+{y}".format_map(d))
1+2
1+2
См. также
str.format() — основной метод форматирования
str.join() — объединение строк
str.replace() — замена подстрок
Примечание
Лицензия и источники
Техническое описание метода адаптировано из официальной документации Python (https://docs.python.org), доступной под Python Software Foundation License Version 2. Перевод на русский, примеры использования и пояснения — © AlashEd Wiki.