Я бы подумал, перебрать правильно упорядоченный набор запросов. Использование yield
для создания генератора эффективно, если набор запросов огромен, в отличие от создания огромного списка и последующей его обработки.
NB Не проверено.
def foo1():
qs = Whatever.objects.all().order_by( 'ts', 'val')
vals, vars = [],[]
for obj in qs:
if vals and obj.ts != ts:
yield ts, vals, vars
vals, vars = [], []
ts = obj.ts
vals.append( obj.val)
vars.append( obj.var)
yield ts, vals, vars # don't forget the last one
Использование:
for ts, val, var in foo1():
print ( ts, val, var)
Для второго вы просто используете zip для результатов:
print ( ts, *[ x for x in zip( val, var) ])