Преобразовать значения словарных ключей из времени UNIX в удобочитаемое время - PullRequest
0 голосов
/ 24 мая 2018

У меня есть переменная со словарем:

EG:

myVariableDictionary = {'result':{'result':[{'Time':1580619600},{'Time':1580619600}]}}

и т. Д., И я хочу вместо этого преобразовать метку времени Unix в удобочитаемую метку времени.

Если я потяну одну клавишу, я могу сделать это с помощью:

placeholderVariable= myVariableDictionary['result']['result'][0]['Time']
myNewTimeVariable = datatime.datatime.fromtimestamp(placeholderVariable)

Но я хочу сделать это на месте для любой итерации значения.Имена ключей всегда одинаковы и просто вложены.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете сделать что-то вроде этого - при условии, что в вашей структуре есть только словари и списки.В противном случае вам, вероятно, потребуется добавить другие случаи в операторы if ...

from datetime import datetime
def time_converter(data):
    for k, v in data.items():
       if isinstance(v, (dict,)):
           data[k] = time_converter(v)
       elif isinstance(v, (list,)):
           data[k] = [time_converter(item) for item in v]
       elif k.lower() == 'time':
           data[k] = datetime.fromtimestamp(v)
    return data

d = {'result':{'result':[{'Time':1580619600},{'Time':1580619600}]}}

print(time_converter(d))

Обратите внимание, что time_converter вызывает себя рекурсивно.Имейте в виду, что в зависимости от размера и ссылок в объекте, который вы передаете (то есть самоссылки или очень больших входных данных), вполне возможно, что вы получите ошибки времени выполнения.Если ваш набор данных относительно управляем и прост, это не проблема.

0 голосов
/ 24 мая 2018

Это один из способов:

from datetime import datetime

d = {'result':{'result':[{'Time':1580619600},{'Time':1580619600}]}}

for i in d['result']['result']:
    i['Time'] = datetime.fromtimestamp(i['Time'])

print(d)

{'result': {'result': [{'Time': datetime.datetime(2020, 2, 2, 5, 0)},
                       {'Time': datetime.datetime(2020, 2, 2, 5, 0)}]}}
...