Фильтрация с приортитетом одной категории над другой
Имеются 2 таблицы - Посты и Категории. Между ними отношение many to many. Необходимо получить 3 Поста, в фильтрации участвует 4 категории, но среди выборки из этих трех Постов как минимум один Пост должен соответствовать приоритетной категории. Т.е: В фильтрации участвуют - Категория-0(приоритетная), Категория-1, Категория-2, Категория-3 В результате необходимо получить как минимум 1 Пост имеющий связь с Категорией-0 и еще 2 случайных Поста подходящие под условия фильтрации. Как определить приоритет к необходимой мне категории?
Ответы (1 шт):
Автор решения: vadim vaduxa
→ Ссылка
import random
category = list(range(4, 8))
print('cats', category)
posts = [[random.randint(0, random.randint(0, 15)) for _ in range(3)] for _ in range(10)]
print('posts', posts)
def skey(ps, mx=len(category) + 1):
lst = []
for p in ps:
try: x = category.index(p)
except ValueError: x = mx
else:
if not x: return x,
lst.append(x)
return tuple(lst)
sort = sorted(posts, key=skey)
print('sorted', sort)
out:
cats [4, 5, 6, 7]
posts [[8, 1, 0], [12, 6, 2], [0, 12, 11], [0, 0, 2], [1, 5, 8], [9, 1, 3], [10, 5, 0], [7, 4, 3], [2, 8, 3], [4, 0, 5]]
sorted [[7, 4, 3], [4, 0, 5], [1, 5, 8], [10, 5, 0], [12, 6, 2], [8, 1, 0], [0, 12, 11], [0, 0, 2], [9, 1, 3], [2, 8, 3]]