Форматирование дат в питоне

 if not all(key in payload for key in payloads[template]):
        raise InvalidPayloadException

    if 'order_date' in payload:
        payload['order_date'] = self._get_formatted_date(payload['order_date'])

    if 'payment_date' in payload:
        payload['payment_date'] = self._get_formatted_date(payload['payment_date'])

    if 'shipped_date' in payload:
        payload['shipped_date'] = self._get_formatted_date(payload['shipped_date'])

У меня есть код, который запускает создание PDF. Он принимает питон python, который содержит полезную нагрузку для PDF.

В PDF есть небольшое количество дат, которые должны отображаться в PDF файле, но не все документы содержат все PDF файлы. Мне нужно отформатировать даты перед отправкой в PDF. На данный момент мой код - это много разных операторов IF, чтобы уловить все возможные даты и отформатировать их в dict.

Есть ли более питонический способ сделать это?

0
источник поделиться
4 ответа

Используйте цикл.

for date_key in ('order_date', 'payment_date', 'shipped_date'):
    if date_key in payload:
        payload[date_key] = self._get_formatted_date(payload[date_key])
+4
источник

Вам не нужны какие-либо из утверждений if.

Общей методологией в Python является EAFP (проще просить прощения, чем разрешение), а не LBYL (Look Before You Leap). Следовательно, вы должны подготовить кортеж или список ключей вы ожидаете, чтобы быть в payload Dict, и использовать try-except, за try-except в случае, если один из ключей отсутствуют.

for key in ('order_date', 'payment_date', 'shipped_date'):
    try:
        payload[key] = self._get_formatted_date(payload[key])
    except KeyError:
        print('{} not in payload dict'.format(key))
+1
источник

Вы могли бы создать кортеж ключей даты и использовать цикл for.

date_keys = ("order_date", "payment_date", "shipped_date")

for date_key in date_keys:
    if date_key in payload:
        payload[date_key] = self._get_formatted_date(payload[date_key])
0
источник

Вы можете создать список всех возможных дат для форматирования и перебора по ним

dates = [
    "order_date",
    "payment_date",
    "shipped_date"
]

for d in dates:
    if d in payload:
       payload[d] = self._get_formatted_date(payload[d])
-1
источник

Посмотрите другие вопросы по метке или Задайте вопрос