Набор запросов Django: создание словаря из набора запросов с общими элементами - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь создать словарь из моей базы данных, который разделит мои данные на значения с общими метками времени.

data_point:
    time: <timestamp>
    value: integer

У меня есть 66 тыс. Точек данных, из которых около 7 тыс. Имеют временные метки (что означает, что измерение проводилось одновременно.

Мне нужно сделать диктовку, которая бы выглядела так:

{
  "data_array": [
    {
      "time": "2018-05-11T10:34:43.826Z",
      "values": [
        13560465,
        87856595,
        78629348
      ]
    },
    {
      "time": "2018-05-11T10:34:43.882Z",
      "values": [
        13560689,
        78237945,
        92378456
      ]
    }
  ]
}

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

Идея состоит в том, чтобы взглянуть на мой набор запросов данных и сгруппировать объекты, которые имеют общую отметку времени , а затем добавить ключ "time" к моему диктовке с помощью значение представляет собой отметку времени и массив «значений» со значением, являющимся списком этих data.value объектов

Я недостаточно опытен, чтобы построить это, не зацикливаясь и, вероятно, очень неэффективно. Что-то вроде «пока отметка времени не меняется: добавьте значение в список», хотя я тоже не знаю, как это сделать.

В идеале, если я могу сделать это с запросами (должно быть быстрее, верно?), Я бы предпочел это.

1 Ответ

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

почему бы не использовать collecionts.defaultdict?

from collection import defaultdict

data = defaultdict(list)   

# qs is your queryset
for time, value in qs.values_list('time', 'value'):
    data[time].append(value)

В этом случае данные выглядят следующим образом:

{
    'time_1': [
        value_1_1,
        value_1_2,
        ...
    ],
    'time_2': [
        value_2_1,
        value_2_2,
        ...
    ],
    ....
}

на данный момент вы можете создать любой выходной формат, который вы хотите

...