use*_*675 10 python datetime dictionary keyerror
我正在尝试在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
Run Code Online (Sandbox Code Playgroud)
错误:
<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)
Run Code Online (Sandbox Code Playgroud)
回答有关日期时间作为字典键的问题:
是的,datetime的时间对象可以用作字典键。
使用对象作为字典键的条件:
要用作字典键,对象必须支持哈希函数(例如,通过
__hash__),相等性比较(例如,通过__eq__或__cmp__)(...)
(来源:DictionaryKeys)
引用条件的日期时间支持:
支持的操作:
...
- 哈希,用作字典键
(来源:datetime-时间对象)
但是,由于dict usage_dict_hourly 为空,您将收到此异常。
usage_dict_hourly由发起{}。因此,当您尝试time_now在函数中查找具有key的元素时constructing_dict,它会引发KeyError异常,因为尚未找到该key。
您实际上并没有useage_dict_hourly以这种方式设置任何值,这是您的错误。理想情况下你应该做类似的事情:
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,只需使用 datetime.datetime.now() 作为键:
datetime_wise_date[datetime.datetime.now()] = data_int.
Run Code Online (Sandbox Code Playgroud)
这样,值就不可能发生冲突(对于 useage_dict_hourly,这是可能的,尽管不太可能)
| 归档时间: |
|
| 查看次数: |
9376 次 |
| 最近记录: |