Уменьшить временную сложность функции разбора кверисетов Django
Эта функция принимает таблицу Django QuerySet, поля (имена столбцов таблицы в виде списка) и имя (строка). Она проверяет, есть ли имя в полях столбцов. Если имя есть в полях, она добавляет сумму поля в список сумм и возвращает этот список в виде словаря после перечисления. Я заметил, что она выполняется за o(n^2) (я думаю) и хотел бы уменьшить ее временную сложность.
#returns an enumerated dict of sums of the fields in the table
#table is a Django QuerySet, fields is a list of fields, name is a string
def fieldSum_to_list(table, fields, name) -> dict:
sum = []
name = name.lower()
for field in fields:
if name in field.name:
if (None in table.aggregate(Sum(field.name)).values()):
# value = 0
# sum.append(value) -> what I was doing before pass
pass
else:
col_sum = table.aggregate(Sum(field.name)).get(
str(field.name) + '__sum')
sum.append(col_sum)
diction = dict(enumerate(sum))
if (len(diction) == 1):
return diction[0]
return dict(enumerate(sum))
Программа замедлилась после добавления этой строки:
if (None in table.aggregate(Sum(field.name)).values()):
это то, что замедлило работу программы, так как до этого она работала намного быстрее, я думаю, что это условие действует как цикл. По сути, я ищу способ проверить и убедиться, что значение этого столбца == None более эффективным способом