如何按单词的频率对字母排序?

时间:2019-06-02 09:23:58

标签: python sorting dictionary

我想按单词在单词中出现频率的降序排列。但是,如果两个字母的频率相同,则应选择字母前一个字母。

我已经使用Counter来查找所有字母的频率,并且它返回一个dict。如何按降序对它们进行排序,然后按字母顺序选择n个频率最高的字母

string='ddddaacccbb'
n=3
from collections import Counter
counter=Counter(string)

假设如果单词是“ ddddaacccbb”且n为3,则它应打印['a','c','d'],这里n是字母数。输出基于每个字母的最高频率,如果两个字母的频率相似,则选择字母前一个字母。

4 个答案:

答案 0 :(得分:1)

使用most_common()计数器方法。

from collection import Counter
string = 'ddddaacccbb'
n = 3
count = Counter(string)
print([letter for letter, _ in count.most_common(n)])

输出将为

['d', 'c', 'a']

如果要按字母顺序排列输出,可以对结果进行排序。

print(sorted(letter for letter, _ in count.most_common(n)))

输出:

['a', 'c', 'd']

答案 1 :(得分:0)

您只需要通过以下方法从列表中检索前n个元素 Counter.most_common并提取出字母,按most_common方法隐式完成从最常见到最不常见的排序

string='aacccbbdddd'
n=3
from collections import Counter
counter=Counter(string)

#Get the letters of n top values
res = [letter[0] for letter in counter.most_common(n)]
print(res)

输出将为

['d', 'c', 'a']

答案 2 :(得分:0)

您可以使用sorted并获取计数器的一部分:

keys = sorted(counter, key=lambda x: (counter.get(x), x))
# sort by value, then key
result = keys[-n:]

答案 3 :(得分:0)

您可以使用已排序函数的key =参数:

对于大多数...最不频繁,对于相同的频率,按字母顺序排列:

letters = sorted(counter,key=lambda c:(-counter[c],c))[:3]

# ['d', 'c', 'a']  

对于至少...最频繁的订购,请使用此:

letters = sorted(counter,key=lambda c:(counter[c],c))[-3:]

# ['a', 'c', 'd']