Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python dictionary datetime as key, keyError

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)
like image 862
user3591675 Avatar asked Mar 11 '16 17:03

user3591675


People also ask

How do I fix key errors in Python?

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.

Why am I getting a KeyError in Python?

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.

How do you avoid KeyError in the dictionary?

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.

What does KeyError 2 mean in Python?

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.


2 Answers

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.

like image 76
emartinelli Avatar answered Sep 16 '22 13:09

emartinelli


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)

like image 31
Abhishek Divekar Avatar answered Sep 20 '22 13:09

Abhishek Divekar