-2

I have a dictionary

d={4: {Timestamp('1997-07-02 00:00:00'): -12.134525612322019,
  Timestamp('1997-07-04 00:00:00'): -3.663247640220524,
  Timestamp('1997-07-07 00:00:00'): -30.649875958814032,
  Timestamp('1997-07-08 00:00:00'): 17.924305289599648,
  Timestamp('1997-07-10 00:00:00'): -25.828099872622467}}

How do I extract only the datetime values of d? Also, what would you suggest since I actually have a nested dictionary and want to extract datetime values for each key?

  • Does this answer your question? [How to return dictionary keys as a list in Python?](https://stackoverflow.com/questions/16819222/how-to-return-dictionary-keys-as-a-list-in-python) – MrNobody33 Jul 27 '20 at 21:37

1 Answers1

0

You could try this:

list(d[4].keys())

>>>[Timestamp('1997-07-02 00:00:00'),
    Timestamp('1997-07-04 00:00:00'),
    Timestamp('1997-07-07 00:00:00'),
    Timestamp('1997-07-08 00:00:00'),
    Timestamp('1997-07-10 00:00:00')]

Or if you want to convert each timestamp to datetime, you could do

datetimes = [t.to_pydatetime() for t in list(d[4].keys())]
datetimes

>>>[datetime.datetime(1997, 7, 2, 0, 0),
    datetime.datetime(1997, 7, 4, 0, 0),
    datetime.datetime(1997, 7, 7, 0, 0),
    datetime.datetime(1997, 7, 8, 0, 0),
    datetime.datetime(1997, 7, 10, 0, 0)]

EDIT:

if you have a long nested dictionary like this:

d = {1: {Timestamp('1997-07-02 00:00:00'): -12.134525612322019, 
         Timestamp('1997-07-04 00:00:00'): -3.663247640220524, 
         Timestamp('1997-07-07 00:00:00'): -30.649875958814032, 
         Timestamp('1997-07-08 00:00:00'): 17.924305289599648, 
         Timestamp('1997-07-10 00:00:00'): -25.828099872622467}, 
          
     2: {Timestamp('1997-07-02 00:00:00'): -12.134525612322019, 
         Timestamp('1997-07-04 00:00:00'): -3.663247640220524, 
         Timestamp('1997-07-07 00:00:00'): -30.649875958814032, 
         Timestamp('1997-07-08 00:00:00'): 17.924305289599648, 
         Timestamp('1997-07-10 00:00:00'): -25.828099872622467}, 
          
     3: {Timestamp('1997-07-02 00:00:00'): -12.134525612322019, 
         Timestamp('1997-07-04 00:00:00'): -3.663247640220524, 
         Timestamp('1997-07-07 00:00:00'): -30.649875958814032, 
         Timestamp('1997-07-08 00:00:00'): 17.924305289599648, 
         Timestamp('1997-07-10 00:00:00'): -25.828099872622467}}

and you want the datetime for every key, then you can iterate through the whole dict like this:

datetimes = []

for key in d: 
    for timestamp in d[key]:
        datetime = timestamp.to_pydatetime() 
        datetimes.append(datetime)

datetimes
>>>[datetime.datetime(1997, 7, 2, 0, 0),
    datetime.datetime(1997, 7, 4, 0, 0),
    datetime.datetime(1997, 7, 7, 0, 0),
    datetime.datetime(1997, 7, 8, 0, 0),
    datetime.datetime(1997, 7, 10, 0, 0),
    datetime.datetime(1997, 7, 2, 0, 0),
    datetime.datetime(1997, 7, 4, 0, 0),
    datetime.datetime(1997, 7, 7, 0, 0),
    datetime.datetime(1997, 7, 8, 0, 0),
    datetime.datetime(1997, 7, 10, 0, 0),
    datetime.datetime(1997, 7, 2, 0, 0),
    datetime.datetime(1997, 7, 4, 0, 0),
    datetime.datetime(1997, 7, 7, 0, 0),
    datetime.datetime(1997, 7, 8, 0, 0),
    datetime.datetime(1997, 7, 10, 0, 0)]

Or, if you want a whole new dict with the same keys but with the values as a list of datetimes, you can do this:

datetime_dict = {}

for key in d: 
    datetime_dict[key] = [ts.to_pydatetime() for ts in d[key]]

datetime_dict
>>>{1: [datetime.datetime(1997, 7, 2, 0, 0),
  datetime.datetime(1997, 7, 4, 0, 0),
  datetime.datetime(1997, 7, 7, 0, 0),
  datetime.datetime(1997, 7, 8, 0, 0),
  datetime.datetime(1997, 7, 10, 0, 0)],
   2: [datetime.datetime(1997, 7, 2, 0, 0),
  datetime.datetime(1997, 7, 4, 0, 0),
  datetime.datetime(1997, 7, 7, 0, 0),
  datetime.datetime(1997, 7, 8, 0, 0),
  datetime.datetime(1997, 7, 10, 0, 0)],
   3: [datetime.datetime(1997, 7, 2, 0, 0),
  datetime.datetime(1997, 7, 4, 0, 0),
  datetime.datetime(1997, 7, 7, 0, 0),
  datetime.datetime(1997, 7, 8, 0, 0),
  datetime.datetime(1997, 7, 10, 0, 0)]}