Я пытаюсь поместить предложение в список, а затем отсортировать список по вхождению слова в списке и, если необходимо, когда два слова встречаются одинаковое количество раз, по алфавитному порядку. Я написал такой код:

def frequencia(texto):
    pals = texto.split()
    m = sorted(pals,key=pals.count,reverse=True)
    return m

Проблема в том, что он повторяет слова и не применяет алфавитный порядок. В предложении «Я парень, и я голоден» вывод должен быть ['есть', 'я', 'а', 'парень', 'голоден'].

2
Rui C 21 Фев 2021 в 22:50

1 ответ

Лучший ответ

Попробуйте следующее:

sentence = 'I am a guy and I am hungry'

words = sentence.split(' ')
sortedwords = sorted(set(words), key=lambda x: (-words.count(x), x.lower()))
#  ['am', 'I', 'a', 'and', 'guy', 'hungry']

Используйте set, чтобы получить уникальные слова во вводе. Затем отсортируйте их с помощью tuple с приоритетом наибольшего числа появлений (при отрицательном счетчике наиболее частые имеют самые отрицательные значения и сортируются первыми), за которым следует алфавитный порядок (используя lower() для сделать эквивалент в верхнем и нижнем регистре).

3
Tom 21 Фев 2021 в 20:03