单词中字母的频率

2024-10-01 11:40:59 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有个问题。 假设我们有一个单词,单词中的所有字母都必须按出现频率排序,从出现频率最高的字母开始。 例如,“假设”看起来像“ppSsuoe”或“Ssppoeu”等等

我认为我应该在列表中添加单词,找到相同的字母,计算出我有多少相同的字母,并将其附加到列表的开头,只匹配其中一个的字母可以随机打印。你知道吗

但在列表中添加单词后,我不知道该怎么办。 如何找到相同的字母?如何将它们排序并附加到单词的开头?我应该使用临时列表吗?或者我应该用关键字:值字典? 你知道吗

name = 'Suppose'
list = []
for letter in name:    
    list.append(letter)

Tags: namein列表for字典排序字母关键字
3条回答

首先,我们将输入转换成一个字典,通过Counter对每个条目进行计数。接下来,我们使用sorted将字典按我们想要的顺序(从最大到最小)排序。最后,我们在字典上循环,将项目添加回字符串形式,这样p:2就变成了pp。之后,我们通过join将所有项连接到一个字符串中。你知道吗

from collections import Counter

name = 'Suppose'
results = Counter(name)
print("".join([k * results[k] for k in sorted(results, key=lambda a: results[a], reverse = True)]))
from collections import OrderedDict
name = 'Suppose'
my_dictionary = dict()
for letter in name.lower():    
    if letter in my_dictionary.keys():
        my_dictionary[letter] += 1
    else:
        my_dictionary[letter] = 1
my_dictionary = OrderedDict(sorted(my_dictionary.items(), key=lambda x:x[1], reverse=True))

new_word = str()
for key, value in my_dictionary.items():
     new_word += (value*key)

print (new_word)

我要做的方法是首先创建一个dict,用键输入字母并计算出现的次数。别忘了使用name.下()以便先把这个词斩首。然后,按值降序排列dict。最后,创建一个新字符串并将key*值添加到其中

可以使用Collection,后跟适当的排序:

>>> from collections import Counter
>>> f = Counter("Suppose")
>>> ''.join(k*v for k,v in sorted(f.items(), reverse = True,key = lambda p:p[1]))
'ppuSseo'

但是请注意,此方法没有指定具有相同频率的字母的最终顺序。在这里,唯一可以保证的是,更频繁的信件将出现在不太频繁的信件之前。如果您希望相同频率的字母按字母顺序排列,则需要不同的key参数。你知道吗

相关问题 更多 >