python dictionary datetime as key,keyError

时间:2016-03-11 17:30:24

标签: 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

错误:

<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)

2 个答案:

答案 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)