python字典日期时间作为键,keyError
Posted
技术标签:
【中文标题】python字典日期时间作为键,keyError【英文标题】:python dictionary datetime as key, keyError 【发布时间】:2016-06-27 01:29:42 【问题描述】:我正在尝试在 Linux 中使用 cron 运行 Python 脚本,它应该构建一个数据字典。我试图在字典中使用datetime().now().time()
as 键,但它似乎引发了错误。
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)
【问题讨论】:
你没有在你的例子中定义usage_dict_hourly
,如果你的意思是usage_hourly_dict
,你从来没有在里面放任何东西。难怪没有钥匙就找不到钥匙。
在您的代码中添加一些 cmets 可能是值得的。除了是一种良好的做法外,这对我们现在和您/其他任何人在未来都会有帮助。目前尚不清楚date_wise_dict
和useage_dict_hourly
应该包含什么。
你是对的。这是我在这里打字时犯的一个错字。但它并没有解决错误。
尽管有错字,正如@zondo 所说,您的错误是由于usage_dict_hourly
为空而引起的,因此在那里找不到任何东西。它不是由作为日期时间的键类型引起的。 >> 要用作字典键,对象必须支持散列函数(例如通过 __hash__)、相等比较(例如通过 __eq__ 或 __cmp__)(来源:DictionaryKeys)
【参考方案1】:
回答您关于日期时间作为字典键的问题:
是的,日期时间的时间对象可以用作字典键。
使用对象作为字典键的条件:
要用作字典键,对象必须支持散列函数(例如通过
__hash__
)、相等比较(例如通过__eq__
或__cmp__
)(...)
(来源:DictionaryKeys)
对引用条件的日期时间支持:
支持的操作:
...
散列,用作字典键
(来源:datetime - time Objects)
但是,您会收到此异常,因为 dict usage_dict_hourly
为空。
usage_dict_hourly
以 启动。因此,当您尝试在函数
constructing_dict
中查找键为time_now
的元素时,会引发KeyError
异常,因为该键尚未找到。
【讨论】:
【参考方案2】:您实际上并没有以这种方式将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 来说,这是可能的——尽管不太可能)
【讨论】:
以上是关于python字典日期时间作为键,keyError的主要内容,如果未能解决你的问题,请参考以下文章