python dictionary datetime as key,keyError

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)

ema*_*lli 5

回答有关日期时间作为字典键的问题:

是的,datetime的时间对象可以用作字典键。

使用对象作为字典键的条件:

要用作字典键,对象必须支持哈希函数(例如,通过__hash__),相等性比较(例如,通过__eq____cmp__)(...)

(来源:DictionaryKeys

引用条件的日期时间支持:

支持的操作:

...

  • 哈希,用作字典键

(来源:datetime-时间对象

但是,由于dict usage_dict_hourly 为空,您将收到此异常。

usage_dict_hourly由发起{}。因此,当您尝试time_now在函数中查找具有key的元素时constructing_dict,它会引发KeyError异常,因为尚未找到该key。


Abh*_*kar 1

您实际上并没有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,这是可能的,尽管不太可能)