Найти - Пользователи
Полная версия: Как сделать "покрасоте"? JSON from dict or list
Начало » Python для новичков » Как сделать "покрасоте"? JSON from dict or list
1
greggyNapalm
Добрый день всем. подскажите пожалуйста как наиболее лаконично и просто решить следующую задачу.
есть демон, который каждые 5s собирает числовые данные, сейча собирает в dict, можно сдлеать в list. Данные следующего вида:
{unixtime: value, unixtime: value, ...etc}
Пример:
{'1315488736': 0.17000000000000001, '1315488734': 0.17999999999999999, '1315488740': 0.14999999999999999, '1315488738': 0.17000000000000001}
Необходимо преобразовать к следующему виду:
{
"data": [
{"label":"1 min = ........", "data":[[1, 1], [2, 2], [3, 3], [4, 2], [5, 1], [6, 1], [7, 1], [8, 1], [9, 2], [10, 3], [11, 2], [12, 1], [13, 1], [14, 1]]},
{"label":"5 min = ........", "data":[[1, 1], [2, 1], [3, 2], [4, 1], [5, 1], [6, 1], [7, 1], [8, 1], [9, 1], [10, 2], [11, 3], [12, 2], [13, 1], [14, 1]]}
],
"ticks": {
"from": 1315414833147,
"to": 1315416933147
}
}
Где:
data":[[unixtime, value]
"from": first unixtime
"to": last unixtime
Силился сделать это при помощи библиотеки simplejson не выходит. Единсвенным вариантом, который вижу на данный момент - сибирать требуемый формат канкатинацией строк в цикле.

Есть идеи, господа?
s0rg
import time
import pprint
from datetime import datetime, timedelta

test_in = {'1315488736': 0.17000000000000001,
'1315488734': 0.17999999999999999,
'1315488740': 0.14999999999999999,
'1315488738': 0.17000000000000001}


def preprocess(input):

def get_time_slice(tup, period):
ts_start = tup[0][0]
ts_end = ts_start + period
slice = filter(lambda a: a[0] < ts_end, tup)
return map(lambda a: [time.mktime(a[0].timetuple()), a[1]], slice)

tup = list()
ksorted = sorted(input.keys())

ts_min = min(ksorted)
ts_max = max(ksorted)

for k in ksorted:
dt = datetime.fromtimestamp(float(k))
tup.append((dt, input[k]))

res = dict()

tmp = list()
for slice in (1, 5):
key = '%d_min' % slice
val = get_time_slice(tup, timedelta(minutes=slice))
tmp.append({key: val})
res['data'] = tmp
res['ticks'] = {'from': ts_min, 'to': ts_max}
return res

pprint.pprint(preprocess(test_in))
Как-то так )))
evilempirer
прочитайте вначале про json формат и нарисуйте нормальную структуру, которая вам действительно нужна и с которой просто работать, сейчас у вас это все выглядить, аля симпотичненько, но функциональности в этом не видно
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB