我有一个类似
的字典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'}}"
有没有办法在不创建自定义函数的情况下执行此操作?
答案 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