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_dictuseage_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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用与日期键匹配的字典填充表格视图

我可以使用对象(类的实例)作为 Python 中的字典键吗?

Python:元组/字典作为键、选择、排序

在 Python 中使用 None 作为字典键是不是合理?

Python将csv写入字典列表,其中标题作为键,行作为值

如何在 Python 中直接获取字典键作为变量(而不是通过从值中搜索)?