#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)]