I'm trying to run a Python script using cron in Linux, which should construct a dictionary of data. I'm attempting to use datetime().now().time()
as keys in the dictionary, but it seems to raise an error.
Can't the datetime
type be used as a dictionary key in Python? If that is the case, what are my alternatives?
Code:
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
Error:
<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)
A Python KeyError is raised when you try to access an item in a dictionary that does not exist. You can fix this error by modifying your program to select an item from a dictionary that does exist. Or you can handle this error by checking if a key exists first.
A Python KeyError exception is what is raised when you try to access a key that isn't in a dictionary ( dict ). Python's official documentation says that the KeyError is raised when a mapping key is accessed and isn't found in the mapping. A mapping is a data structure that maps one set of values to another.
Avoiding KeyError when accessing Dictionary Key We can avoid KeyError by using get() function to access the key value. If the key is missing, None is returned. We can also specify a default value to return when the key is missing.
The Python "KeyError: 2" exception is caused when we try to access a 2 key in a dictionary that doesn't contain the key. To solve the error, set the key in the dictionary before trying to access it or conditionally set it if it doesn't exist.
Answering your question about datetime as a dictionary key:
Yes, time object of datetime can be used as dictionary key.
Conditions to use an object as a dictionary key:
To be used as a dictionary key, an object must support the hash function (e.g. through
__hash__
), equality comparison (e.g. through__eq__
or__cmp__
)(...)
(Source: DictionaryKeys)
datetime support for cited conditions:
Supported operations:
...
- hash, use as dict key
(Source: datetime - time Objects)
However, you are getting this exception because dict usage_dict_hourly
is empty.
usage_dict_hourly
is initiated with {}
. So, when you try to look for the element with key time_now
in your function constructing_dict
, it raises KeyError
exception, because that key has not been found.
You aren't actually setting useage_dict_hourly
to any value that way, that's your error.
You should ideally do something like:
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
Or, better yet, just use datetime.datetime.now() as the key:
datetime_wise_date[datetime.datetime.now()] = data_int.
This way, there is no possibility of clashes in the value (which is possible - though unlikely - for useage_dict_hourly)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With