我正在尝试在Linux中使用cron运行Python脚本,它应该构建一个数据字典。我试图在字典中使用datetime().now().time()
作为键,但它似乎引发了错误。
不能将datetime
类型用作Python中的字典键吗?如果是这种情况,我的替代方案是什么?
代码:
time_now = dt.datetime.now().time()
date_today = dt.datetime.now().date()
usage_dict_hourly = {}
date_wise_dict = {}
def constructing_dict(data_int):
date_wise_dict[usage_dict_hourly[time_now]] = data_int
print date_wise_dict
错误:
<ipython-input-9-ef6a500cc71b> in constructing_dict(data_int)
36
37 def constructing_dict(data_int):
---> 38 date_wise_dict[usage_dict_hourly[time_now]] = data_int
39 print date_wise_dict
40
KeyError: datetime.time(22, 40, 33, 746509)
答案 0 :(得分:4)
将有关datetime的问题作为字典键回答:
是的,datetime的时间对象可以用作字典键。
将对象用作字典键的条件:
要用作字典键,对象必须支持哈希函数(例如通过
__hash__
),相等比较(例如通过__eq__
或__cmp__
)(...)
(资料来源:DictionaryKeys)
引用条件的日期时间支持:
支持的操作:
...
- hash,用作dict键
(资料来源:datetime - time Objects)
但是,您收到此异常是因为dict usage_dict_hourly
为空。
usage_dict_hourly
以{}
启动。因此,当您尝试在函数time_now
中查找带有键constructing_dict
的元素时,会引发KeyError
异常,因为尚未找到该键。
答案 1 :(得分:1)
您实际上并没有将useage_dict_hourly
设置为任何值,这是您的错误。
理想情况下,您应该执行以下操作:
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
或者,更好的是,只需使用datetime.datetime.now()作为键:
datetime_wise_date[datetime.datetime.now()] = data_int.
这样,价值就不会发生冲突(这可能 - 虽然不太可能 - 对于useage_dict_hourly)