python:嵌套字典将datetime打印为字符串

时间:2016-10-26 16:18:25

标签: python string dictionary

this question

有些相关

我有一个类似

的字典
times = {
 'on': 
    {'start': datetime.time(6, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>), 
     'end': datetime.time(8, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)}
 'off':
    {'start': datetime.time(10, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>), 
     'end': datetime.time(13, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)}
}

调用str(times)会给出

In[34]: str(f)
Out[34]: "{'on': {'start': datetime.time(6, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>), 'end': datetime.time(8, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)}, 'off': {'start': datetime.time(10, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>), 'end': datetime.time(13, 0, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)}}"

当我希望将日期时间输出为

In[37]: str(times['on']['start'])
Out[37]: '06:00:00'

AKA:

"{'on': {'start': '06:00:00, 'end': '08:00:00'}, 'off': {'start': '10:00:00', 'end': '13:00:00'}}"

有没有办法在不创建自定义函数的情况下执行此操作?

3 个答案:

答案 0 :(得分:2)

这样做:

str({k: {k1: str(v1) for k1, v1 in v.items()} for k, v in times.items()})

输出看起来像这样:

"{'on': {'start': '10:01:00', 'end': '10:01:00'}, 'off': {'start': '10:01:00', 'end': '10:01:00'}}"

它有点粗略,因为你基本上必须解包然后重新打包嵌套字典,但它有效。对于任意嵌套的数据,您需要一个自定义函数。

答案 1 :(得分:1)

您需要将格式字符串datetime.strftime()用作"%H:%M:%S"

因此,为了更新您的词典,请执行:

for key, nested_dict in times.items():
    for k in nested_dict:
        nested_dict[k] = nested_dict[k].strftime("%H:%M:%S")

或者,使用 dict comprehension

{key: {k: v.strftime("%H:%M:%S") for k, v in nested_dict.items()} 
      for key, nested_dict in times.items()}

答案 2 :(得分:0)

这是子类控制时间对象的字符串输出的一个很好的例子:

你可以这样做:

class MyTime(datetime.time):   
    def __repr__(self):
        return datetime.time.strftime(self, "%H:%M:%S")    


times = {
     'on': 
        {'start': MyTime(6, 0), 
         'end': MyTime(8, 0)},
     'off':
        {'start': MyTime(10, 0), 
         'end': MyTime(13, 0)}
    }

然后格式化是自动的:

>>> times
{'on': {'start': 06:00:00, 'end': 08:00:00}, 'off': {'start': 10:00:00, 'end': 13:00:00}}

然而,嵌套字典的元素仍然是时间对象:

>>> times['on']['start'].hour
6