Форматирование строки с использованием словаря в Python 3.x

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Существует способ форматирования строк с помощью значений из словаря – применяем метод str.format() и распаковываем словарь, используя двойные звёздочки **:

Python
Скопировать код
data = {"name": "Алиса", "age": 30}
message = "Привет, {name}! Тебе уже {age} лет!".format(**data)
print(message)  # Вывод: "Привет, Алиса! Тебе уже 30 лет!"

В этом случае фигурные скобки заменяются значениями, которые соответствуют ключам из словаря.

Кинга Идем в IT: пошаговый план для смены профессии

Продвинутые функции работы со строками

Рассмотрим все возможности Python 3.x, связанные с форматированием строк на основе словарей.

Распаковка словаря при помощи ключевых аргументов

Символ ** позволяет распаковать словарь непосредственно в методе str.format(), как получение бонуса в видеоигре:

Python
Скопировать код
info = {"first": "Джон", "last": "Доу"}
formatted = "Итак, представляю: {first} {last}!".format(**info)

Использование method format_map

Метод str.format_map() похож на str.format(), но основное отличие в том, что он прямо принимает словарь для замены значений:

Python
Скопировать код
person = {"name": "Эмма", "profession": "программист"}
sentence = "Привет, я {name}, местный {profession}.".format_map(person)

Отсутствуют ключи? Не страшно!

Если в словаре не хватает ключей, collections.defaultdict позволяет указать значения по умолчанию для недостающих ключей:

Python
Скопировать код
from collections import defaultdict
placeholder = defaultdict(lambda: "¯\_(ツ)_/¯", {"hello": "Бонжур"})
sentence = "По-французски 'hello' будет {hello}, а 'bye' — {bye}.".format_map(placeholder)

Новаторские f-строки

Начиная с версии Python 3.6, стало возможным использовать f-строки — более краткий и эстетически приятный способ форматирования:

Python
Скопировать код
name = "Лукас"
message = f"Привет, {name}!"

Работа с индексами и атрибутами: многовариантные подходы

При обработке объектов или структур данных форматирование может быть более утонченным.

Обращение к атрибутам объектов

Python
Скопировать код
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

alice = Person("Алиса", 28)
info = f"{alice.name} играет с временем. Её возраст — {alice.age}."

Обработка вложенных словарей

Форматирование строк с вложенными словарями походит на решение головоломки:

Python
Скопировать код
records = {"user": {"username": "nerd_alert", "location": "в далёкой галактике"}}
intro = f"{records['user']['username']} соединяется из {records['user']['location']}. Да пребудет с вами сила!"

Трудности на старте

Важно уметь справляться с нетипичными ситуациями при форматировании строк.

Выбор кавычек

Если возникает путаница с кавычками в f-строках, необходимо применять разные типы кавычек:

Python
Скопировать код
quote = "высший пилотаж!"
msg = f'Форматирование строк в Python — это "{quote}"'

Внутренние условия

F-строки удобны не только для использования переменных, но и для выполнения условных выражений прямо внутри них:

Python
Скопировать код
score = 90
response = f"Ваш результат: {score}. Вы {'выше всех похвал' if score > 85 else 'сработали на славу'}!"

Визуализация

Представьте, что данные — это ваш гардероб, а строка — это манекен, которого вы одеваете.

Markdown
Скопировать код
Манекен (Строка): "Здравствуйте, {name}. Сегодня вам исполнилось {age}!"
Одежда (Данные): {'name': 'Чарли', 'age': 28}

Процесс одевания:

Python
Скопировать код
formatted_string = "Здравствуйте, {name}. Сегодня вам исполнилось {age}!".format(**{'name': 'Чарли', 'age': 28})

В итоге манекен преобразуется:

Markdown
Скопировать код
Одетый манекен: "Здравствуйте, Чарли. Сегодня вам исполнилось 28!"

Таким образом, мы оживляем манекен. Форматирование строки в Python с использованием словаря превращается в занимательный процесс!

Вопросы производительности

В плане скорости f-строки обычно обходят другие методы, поскольку работают быстрее. Однако:

  • f-строки: крайне лаконичны и понятны
  • str.format() и format_map(): всё ещё полезны, но немного более многословны

Стратегия выбора

Выбор между f-строками, str.format() или format_map() зависит не столько от их усилия, сколько от:

  • Версии Python, с которой вы работаете
  • Стайлгайда, которому вы или ваша команда следуете
  • Сложности структур данных, с которыми предстоит взаимодействовать

Полезные материалы

  1. Встроенные типы — документация Python 3.12.2
  2. Лучшие практики форматирования строк в Python – Real Python
  3. F-строки в Python для интерполяции и форматирования строк – Real Python
  4. PEP 498 – Литеральная интерполяция строк
  5. string – Как отформатировать число с переменным количеством цифр в Python? – Stack Overflow
  6. PyFormat: Использование % и .format() на всеобщее благо!
  7. string — Текстовые константы и шаблоны — PyMOTW 3