@moyo_pochteniye

Как сделать правильный порядок отображения?

Добрый день. Есть следующая задача:

Есть два списка, с повторяющимеся элементами
Мне нужно сначала сделать первый список упорядоченым по кол-ву элементов по уменьшению и добавить второй, так же отсортированный список.

DEBUG: User suggestions for user_id=1, context=I like to test it: ['one', 'one', 'one', 'four']
DEBUG: Global suggestions for , context=[('two',), ('two',), ('three',)]


В данном случае - получить['one', 'four', 'two', 'three']

def suggest():
    suggestions_user = model.suggest_next_words(user_id, context)
    suggestions_global = model.get_global_suggestions(context)

    user_counts = Counter(suggestions_user)
    global_counts = Counter(suggestions_global)

    sorted_user_suggestions = sorted(user_counts.items(), key=lambda x: (-x[1], x[0]))
    sorted_global_suggestions = sorted(global_counts.items(), key=lambda x: (-x[1], x[0]))

    combined_suggestions_set = set()
    combined_suggestions = []

    for item in sorted_user_suggestions + sorted_global_suggestions:
        suggestion = item[0]
        if suggestion not in combined_suggestions_set:
            combined_suggestions_set.add(suggestion)
            combined_suggestions.append(suggestion)

    response = {
        'suggestions_user': [item[0] for item in sorted_user_suggestions],
        'suggestions_global': [item[0] for item in sorted_global_suggestions],
        'combined_suggestions': combined_suggestions
    }

    return jsonify(response)

{"combined_suggestions":["three","one","four","two"],"suggestions_global":["three","two"],"suggestions_user":["three","one","four"]}

Мне выдает
combined_suggestions":["four","one","three","two"],


Добавлял реверсы везде, либо переворачивает весь список, либо ничего не происходит
  • Вопрос задан
  • 69 просмотров
Решения вопроса 3
Vindicar
@Vindicar
RTFM!
Что-то такое?
from collections import Counter
from collections.abc import Hashable

def combine_suggestions(user: list[Hashable], glob: list[Hashable]) -> list[Hashable]:
    uc = Counter(user)
    gc = Counter(glob)
    for key in uc:
        gc.pop(key, None)
    u = uc.most_common()
    g = gc.most_common()
    return [item[0] for item in (u + g)]

https://docs.python.org/3.9/library/collections.ht...
Ответ написан
Комментировать
@maximq
QA Engineer
Преобразовываем в множества и обратно, сортируем с аргументом key=len и складываем два списка.
a = ['one', 'one', 'one', 'four']
b = ['two', 'two', 'three']
a, b = list(set(a)), list(set(b))

a.sort(key=len)
b.sort(key=len)
a += b
print(a)
#['one', 'four', 'two', 'three']
Ответ написан
Комментировать
@codingoleg
from collections import Counter

user = ['one', 'one', 'one', 'four']
glob = [('two',), ('two',), ('three',)]

def combine(user, glob):
    suggestions_user = [item[0] for item in Counter(user).most_common()]
    suggestions_global = [item[0] for item in Counter(i[0] for i in glob).most_common()]

    return {
        'suggestions_user': suggestions_user,
        'suggestions_global': suggestions_global,
        'combined_suggestions': suggestions_user + suggestions_global
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
14 июн. 2024, в 13:28
40000 руб./за проект
14 июн. 2024, в 13:25
20000 руб./за проект
14 июн. 2024, в 12:54
12500 руб./за проект