我想按单词在单词中出现频率的降序排列。但是,如果两个字母的频率相同,则应选择字母前一个字母。
我已经使用Counter来查找所有字母的频率,并且它返回一个dict。如何按降序对它们进行排序,然后按字母顺序选择n个频率最高的字母
string='ddddaacccbb'
n=3
from collections import Counter
counter=Counter(string)
假设如果单词是“ ddddaacccbb”且n为3,则它应打印['a','c','d'],这里n是字母数。输出基于每个字母的最高频率,如果两个字母的频率相似,则选择字母前一个字母。
答案 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']