python字典datetime作为键,keyError

python字典datetime作为键,keyError,python,datetime,dictionary,keyerror,Python,Datetime,Dictionary,Keyerror,我正在尝试在Linux中使用cron运行Python脚本,它应该构建一个数据字典。我试图使用datetime().now().time()作为字典中的键,但它似乎引发了一个错误 在Python中,datetime类型不能用作字典键吗?如果是这样,我有什么选择 代码: 错误: 在构造dict(data\u int)时 36 37定义构造目录(数据链接): --->38日期/日期/时间[使用/时间/小时]=数据/时间 39打印日期 40 KeyError:datetime.time(22,40,33

我正在尝试在Linux中使用cron运行Python脚本,它应该构建一个数据字典。我试图使用
datetime().now().time()
作为字典中的键,但它似乎引发了一个错误

在Python中,
datetime
类型不能用作字典键吗?如果是这样,我有什么选择

代码:

错误:

在构造dict(data\u int)时
36
37定义构造目录(数据链接):
--->38日期/日期/时间[使用/时间/小时]=数据/时间
39打印日期
40
KeyError:datetime.time(22,40,33746509)

您实际上没有将
useage\u dict\u 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.

这样,值就不可能发生冲突(虽然不太可能,但每小时使用一次)

回答您关于datetime作为字典键的问题:

是的,datetime的time对象可以用作字典键

将对象用作字典键的条件:

要用作字典键,对象必须支持哈希函数(例如,通过
\uuuuuuuuuuuuuuuuuuuuuuu
)、相等比较(例如,通过
\uuuuuueq\uuuuuuuuuuu
)(…)

(来源:)

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

支持的操作:

  • 哈希,用作dict键
(来源:)

但是,由于dict
usage\u dict\u hourly
为空,因此您将获得此异常


usage\u dict\u hourly
通过
{}
启动。因此,当您尝试在函数
构造dict
中查找键为
time\u now
的元素时,它会引发
KeyError
异常,因为尚未找到该键。

您在示例中没有定义
每小时使用次数
,如果您的意思是
每小时使用次数
,你从来没有在里面放过任何东西。毫无疑问,如果没有任何键,它就找不到键。也许值得在代码中添加一些注释。除了良好的实践之外,这对我们现在以及您/其他人将来关注这一点都很有用。现在还不清楚
date\u wise\u dict
useage\u dict\u hourly
应该包含什么内容。你是对的。这是我在这里打字时犯的错误。但这并不能解决错误。尽管输入错误,正如@zondo所说的,您的错误是因为
usage\u dict\u hourly
是空的,所以在那里找不到任何东西。它不是由键类型datetime引起的。>>要用作字典键,对象必须支持哈希函数(例如通过_哈希函数)、相等比较(例如通过_eq或_cmp函数)(来源:)
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
datetime_wise_date[datetime.datetime.now()] = data_int.