在Python dict中格式化日期

在Python dict中格式化日期,python,Python,我有一些触发PDF生成的代码。它接受包含PDF有效负载的python dict 有很多日期需要显示在PDF中,但并非所有文档都包含所有PDF。在发送到PDF之前,我需要格式化日期。目前,我的代码使用了很多不同的IF语句来捕获所有可能的日期并在dict中格式化它们 有没有更符合python的方法呢?您不需要任何if语句 Python中的一种常用方法是EAFP(请求原谅比请求许可更容易),而不是LBYL(三思而后行)。因此你应该 准备一个元组或您希望位于有效负载中的键列表dict,并使用try ex

我有一些触发PDF生成的代码。它接受包含PDF有效负载的python dict

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


有没有更符合python的方法呢?

您不需要任何
if
语句

Python中的一种常用方法是EAFP(请求原谅比请求许可更容易),而不是LBYL(三思而后行)。因此你应该 准备一个元组或您希望位于
有效负载中的键列表
dict,并使用
try except
,以防其中一个键丢失

 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'])

您不需要任何
if
语句

Python中的一种常用方法是EAFP(请求原谅比请求许可更容易),而不是LBYL(三思而后行)。因此你应该 准备一个元组或您希望位于
有效负载中的键列表
dict,并使用
try except
,以防其中一个键丢失

 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'])
使用循环

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))
使用循环

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))

您可以创建一个包含所有可能日期的列表,以对其进行格式化和迭代

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

您可以创建一个包含所有可能日期的列表,以对其进行格式化和迭代

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

您可以创建日期键的元组并使用for循环

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

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

您可以创建日期键的元组并使用for循环

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

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

异常处理不是一个有条件的过程,因此检查是否存在异常更为简单。请参阅以获取更多解释,但不太像Pythonic,请参阅OP以获取Pythonic方法。它还取决于预期会发生什么,现有密钥还是缺少密钥。当您知道异常将是异常的(或者当您可能有竞争条件时,这不是重点)时,EAFP就可以了。不,盲目地使用可能昂贵的try/excepts仅仅是因为有人曾经说它是“pythonic”,而有一种更便宜的解决方案,并且没有可能的种族条件是绝对不pythonic的。EAFP很好,不知道为什么人们对它有这么大的问题。这个答案很好,因为它展示了问题的另一个视角。异常处理不是一个有条件的过程,所以检查是否存在异常更为清晰。请参阅以获取更多解释,但不太像Pythonic,请参阅OP以获取Pythonic方法。它还取决于预期会发生什么,现有密钥还是缺少密钥。当您知道异常将是异常的(或者当您可能有竞争条件时,这不是重点)时,EAFP就可以了。不,盲目地使用可能昂贵的try/excepts仅仅是因为有人曾经说它是“pythonic”,而有一种更便宜的解决方案,并且没有可能的种族条件是绝对不pythonic的。EAFP很好,不知道为什么人们对它有这么大的问题。这个答案很好,因为它展示了问题的另一个视角。