Skip to content
Advertisement

update dictionary base on time delta of value

I am trying to update a dictionary based on the time delta generated from its value.

This is an example of the dictionary:

my_dict = {'6.1.7.1': {'timestamp':('2020-05-26 12:05:08')},
'1.1.1.2': {'timestamp': ('2020-05-26 12:05:08')},
'2.61.5.4': {'timestamp': ('2020-05-25 12:05:08')},}

I want to find out if the key value has a timestamp value that exceeds 24hr to delete it, so I have done this:

from datetime import date
from datetime import datetime
import pandas as pd

today = date.today()
today=today.strftime(format= '%Y-%m-%d %H:%M:%S')
today=pd.to_datetime(today)
print( today)

for k,v in my_dict.items():
    timedelta = v - today
    if timedelta>24:
        my_dict.pop(k, None) 

but I get the following error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-49-037388a76b67> in <module>
      8 
      9 for k,v in my_dict.items():
---> 10     timedelta = v - today
     11     if timedelta>24:
     12         my_dict.pop(k, None)

pandas/_libs/tslibs/timestamps.pyx in pandas._libs.tslibs.timestamps._Timestamp.__sub__()
TypeError: descriptor '__sub__' requires a 'datetime.datetime' object but received a 'dict'

How can I manipulate the value of the dictionary to do get the timedelta and after eliminate the key and value in the dictionary? Any help will be appreciated since I am not very familiar with dictionaries.

Advertisement

Answer

If I understood you correctly, then this should works with you

# you can define a filter function which return a new dictionary
def my_filter(my_dict):
    # define a new dict
    new_dict = dict({})
    now = datetime.now()
    now=today.strftime(format= '%Y-%m-%d %H:%M:%S')
    now=pd.to_datetime(now)
    # loop on the old dictionary
    for (k, v) in my_dict.items():
        # you have to get the 'timestamp' from each value and convert it to datetime
        timedelta = now - pd.to_datetime(v['timestamp'])
        # convert the timedelta to hours and check if it's less than 24 hours to add it to the new dict
        if (timedelta.days*24+timedelta.seconds/3600)<=24:
            new_dict[k] = v
    return new_dict
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement