django работают быстрее или для цикла?

Какая из следующих операций выполняется быстрее?

Использование для цикла:

 OrgIdChoices = []
 Orgid_used_choices = [(choice["organization_id"])for choice in list(Organization.objects.all().values("organization_id"))]   #Gets used ID's
 OrgIdAvailChoices  = [ "%c%c" % (x, y) for x in range(ord('A'), ord('Z')+1) for y in range(ord('A'), ord('Z')+1)]  #Gets available ID's
 for i in OrgIdAvailChoices:
      if not i in Orgid_used_choices:
          OrgIdChoices.append((i,i))   #Generates OrgIdAvailChoices which are not in Orgid_used_choices

ИЛИ используя операцию установки:

 OrgIdChoices = []
 Orgid_used_choices = set([(choice["organization_id"])for choice in list(Organization.objects.all().values("organization_id"))])
 OrgIdAvailChoices  = set([ "%c%c" % (x, y) for x in range(ord('A'), ord('Z')+1) for y in range(ord('A'), ord('Z')+1)])
 OrgChoices = OrgIdAvailChoices - Orgid_used_choices
 for i in OrgChoices:
     OrgIdChoices.append((i,i))
0
nl ja de
Они медленнее, чем использование ORM от django.
добавлено автор Burhan Khalid, источник
Проверить, является ли идентификатор в списке или в наборе, является ключ здесь - один быстрее другого.
добавлено автор Thomas, источник
DJV подходит для запроса used_org_choices . Теперь о OrgIdAvailChoices Я уверен, что itertools может помочь в ваших усилиях использовать их, это будет быстрее ..
добавлено автор Pannu, источник
Не могли бы вы рассказать?
добавлено автор arjun, источник

1 ответы

Посмотрите документацию API QuerySet , точнее values_list flat = True ) и distinct() . Разумеется, это будет быстрее, чем значения , извлекая нужное поле и преобразуя его в list или set .

После этого простой подход к созданию набора OrgIdAvailChoices и difference_update с QuerySet должен быть довольно быстрым, чем ваш предложенный.

Альтернативно, вдохновленный комментарием Pannu, подход с itertools :

import itertools
import string

filter(
    lambda x: x not in OrgIdAvailChoices,
    [''.join(el) for el in itertools.combinations_with_replacement(string.ascii_uppercase, 2)]
)

Честно говоря, я не уверен, что QuerySet на самом деле является набором, то есть если поиск в нем логарифмичен, но, судя по моему опыту, правильное использование ORM Django (как описано в начале моего ответа) принесет вам наибольшее ускорение.

4
добавлено
Python
Python
7 654 участник(ов)

Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/577926

Python beginners
Python beginners
4 449 участник(ов)

Вопросы про Python для чайников. Cпам и троллинг неприемлем. Не злоупотребляйте стикерами. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Статистика тут: https://grstats.me/chat/x4qym2k5uvfkr3al6at7

Django
Django
1 931 участник(ов)

Полезная информация и правила: https://github.com/django-ru/faq Вакансии и резюме: @django_jobs Пофлудить идём сюда: @django_flood Статистика чата: combot.org/chat/-1001063854692

pro.python
pro.python
1 090 участник(ов)

Сообщество разработчиков под Python Создатель: @rodgelius

Rude Python
Rude Python
971 участник(ов)

Python без „девочек”, здесь матерятся и унижают Django. Not gay friendly. Правила: t.me/rudepython/114107 @rudepython | t.me/rudepython

django_jobs
django_jobs
916 участник(ов)

Поиск и предложения работы (Django) Правила: https://t.me/django_jobs/4 Вакансии с тегом #job улетают в канал @django_jobs_board Вопросы к @amureki Основной чат @pydjango

Django
Django
733 участник(ов)

Веб-фреймворк для перфекционистов с дедлайнами. Наша группа на vk: https://vk.com/django_framework В Discord: https://discord.me/django_framework по всем вопросам @MechanisM

rupython
rupython
509 участник(ов)

Группа создана с целью оперативного получения ответов на возникающие вопросы по разработке на яп python, смежные темы, а также человеческого общения. Приветствую!

Python-programming
Python-programming
266 участник(ов)

Чат группы вконтакте https://vk.com/python_community

django flood
django flood
71 участник(ов)

Флудилка джангистов Пока без правил