格式化Python字典中的日期

时间:2017-12-11 10:53:37

标签: python

 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生成的代码。它接受包含PDF有效负载的python dict。

PDF中需要显示的日期数量很少,但并非所有文档都包含所有PDF。我需要在将日期发送到PDF之前格式化日期。目前我的代码是很多不同的IF语句来捕获所有可能的日期并在dict中格式化它们。

有更多的pythonic方式吗?

4 个答案:

答案 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])

答案 1 :(得分:1)

您不需要任何if语句。

Python中常见的方法是EAFP(比请求更容易请求宽恕)而不是LBYL(在你跳跃之前看)。因此你应该 准备一个你希望在payload字典中的密钥或密钥列表,并使用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))

答案 2 :(得分:0)

你可以创建一个日期键元组并使用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])

答案 3 :(得分:-1)

您可以创建所有可能日期的列表来格式化和迭代它们

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

for d in dates:
    if d in payload:
       payload[d] = self._get_formatted_date(payload[d])