Проблемы с лямбда-функцией в Python

#python #sorting

#питон #сортировка #python

Вопрос:

 map = {}

for i in words:
    if i not in map:
        map[i] = 0
    map[i]  = 1
    
values = list(map.items())
values = sorted(values, key=lambda x: [x[1], x[0]], reverse=True)  
 
res = []

for i in range(len(values)-1, len(values)-1-k, -1):
    res.append(values[i][0])
return res
  

Я пытаюсь сначала отсортировать по более высокому количеству частот, а затем по алфавиту. Как бы я это сделал с помощью лямбда-функции?

values это список кортежей, где первый элемент в кортеже представляет слово, а второй элемент представляет его частоту. Например: ("hi", 2)

Например, ["i", "love", "leetcode", "i", "love", "coding"] должен выводиться [('i', 2), ('love', 2), ('leetcode', 1), ('coding', 1)] , но мой выводит [('love', 2), ('i', 2), ('leetcode', 1), ('coding', 1)] .

Комментарии:

1. Вы не объяснили, в чем заключается ваша «проблема». Пожалуйста, добавьте примеры данных, демонстрирующих проблему, с которой вы столкнулись.

2. Моя проблема в том, что мой код неправильно сортирует элементы в алфавитном порядке, когда их количество частот одинаково. Например, [«i», «love», «leetcode», «i», «love», «coding»] должен выводить [(‘i’, 2), (‘love’, 2), (‘leetcode’, 1), (‘coding’,1)], но мой выводит [(‘love’, 2), (‘i’, 2), (‘leetcode’, 1), (‘coding’, 1)] .

3. Вы отсортировали с reverse=True помощью, поэтому они расположены в обратном порядке частоты, а затем равные частоты расположены в обратном алфавитном порядке.

4. Как бы мне это исправить? Можно ли применить reverse только к одному атрибуту

Ответ №1:

Поскольку вы хотите сортировать по убыванию частоты, а затем по алфавиту в порядке, вы не можете использовать reverse=True , поскольку это также приведет к сортировке слов в порядке убывания. Вместо этого вы можете сортировать дальше -x[1] , чтобы сортировать частоты по убыванию:

 values = [('i', 2), ('love', 2), ('leetcode', 1), ('coding', 1)]

values = sorted(values, key=lambda x: (-x[1], x[0]))
print(values)
  

Вывод:

 [('i', 2), ('love', 2), ('coding', 1), ('leetcode', 1)]