按出现次数和字母顺序对列表进行排序

时间:2021-02-21 19:50:31

标签: python sorting

我正在尝试将一个句子放在一个列表中,然后根据列表中单词的出现次数对列表进行排序,如有必要,当 2 个单词出现的次数相同时,按字母顺序排列。我写了这段代码:

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

问题是它重复了单词并且不应用字母顺序。 在句子“I am a man and I am Hungry”上,输出应该是['am','I','a','guy','hungry']

1 个答案:

答案 0 :(得分:3)

尝试以下操作:

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() 到使大写和小写等效)。