dosya97
@dosya97
Fullstack web-developer

Как группировать два списка и отсортировать по количеству совпадении?

Есть два списка
first_names=[[<User: username1>],[<User: username2>],[<User: username3>]]
last_names=[[<User: username1>],[<User: username3>],[<User: username4>]]
intersection=[[<User: username1>],[<User: username3>]]
subtraction=[[<User: username2>],[<User: username4>]]

list_of_all.append(intersection)
list_of_all.append(subtraction)

list_of_all=[[<User: username1>],[<User: username3>],[<User: username2>],[<User: username4>]]

делал как то так но не получилось
context["by_names"].append(list(set(first_names) & set(last_names)))
context["by_names"].append(list(set(last_names) - set(first_names)))

Мне нужно отсортировать наиболее подходящий вариант
и как список подать
Пожалуйста помогите, @Kitaev))
  • Вопрос задан
  • 461 просмотр
Решения вопроса 1
angru
@angru
from itertools import chain
from collections import Counter


list1 = [1, 2, 3]
list2 = [1, 3, 4]
list3 = [1, 4, 5]


counter = Counter(chain(list1, list2, list3))
ordered = sorted(
    set(list1).union(list2).union(list3), key=lambda k: counter[k], reverse=True
)

print(ordered)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@deliro
Пересечением множеств вряд ли добьёшься адекватной релевантности. Ей можно сказать, что объект имеет два или более вхождения (если пересечение двух списков, конечно). Таким образом, объекты с 10-ю и 2-мя вхождениями будут на одном уровне.
Проще считать вхождения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы