@Smeilz1
За любое развитие

Как на Python Сделать свою сортировку?

Добрый день.
Уже разобрался как в Python сделать сортировку элементов.
Теперь возник следующий вопрос. А как задать свой порядок сортировки.
Например есть ряд элементов "a1b2c"
Где a -самый маленький , а c -самый большой.
Как сделать преобразование строки "c2b1a", в тот, в a1b2c?
То есть нужна сортировка строки y = sorted(list(x)) , но по своему критерию.
Как ее сделатЬ?
Например есть игральные карты у них такой порядок 23456789TJQKA по возрастанию.
Нужно чтобы программа из набора "A926K " сделала набор "269KA" по возрастанию.
Прочитал что в Python существует сортировка по ключу. То есть для любого вида данных можно функцией формировать ключ, по которому и будет производиться сортировка. Но как это сделатЬ?
  • Вопрос задан
  • 1172 просмотра
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
from functools import cmp_to_key

def my_sorter(a, b):
    if a > b:
        return -1
    elif a < b:
        return 1
    else:
        return 0

sorted(some_list, key=cmp_to_key(my_sorter))

Вам остаётся только в функции my_sorter определить свои правила сортировки.
Ответ написан
Комментировать
Можно сделать так.
# Создаем словарь где опредляем, приоритет каждого элемента
dict_to_sorting = {
    1: 1,
    2: 2,
    3: 3,
    4: 4,
    # и так далее
    'a': 10,
    'b': 11
    # и так далее
}

list_for_sorting = [2, 3, 4, 'b', 'a', 1, 2]
result = sorted(
    # Что сортируем
    list_for_sorting,
    # Функция опредляющее правило получения значения для каждого элемента
    key=lambda x: dict_to_sorting[x],
    # Флаг, указывающий следует ли производить сортировку в обратном порядке.
    reverse=True
)
print(result)
Ответ написан
Комментировать
aRegius
@aRegius
Python Enthusiast
Добрый день, Олег.

Свою сортировку, реально, можно делать как угодно, в зависимости от задачи: и sort(), и sorted(), и слайсы, и пр. Что касается вашего конкретного примера с картами, вот, например, простой вариант:
>>> symbols_start = '23456789TJQKA'
>>> symbols_heap = 'A926K'
>>> symbols_heap_sort = ''.join(i for i in symbols_start if i in symbols_heap)
>>> symbols_heap_sort
'269KA'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы