按词频排序列表:排序时不输出频率

Sorting a list on frequency of words: frequency not outputted when sorted

提问人:blahblahblah 提问时间:8/30/2023 更新时间:8/30/2023 访问量:39

问:

我正在尝试编写一个程序,该程序将输出以字母表的每个字母开头的单词的出现。到目前为止,我已经让代码工作并输出正确的数字。但是,问题在于,当尝试按字母顺序对频率进行排序时,频率也不会输出。我对 python 相当陌生,我不确定如何解决这个问题。

我的代码如下所示:

f = open('textfile.txt','r')
data=f.read()
words= data.split()
#Alphabet occurence
alpha ={}
for alphaword in words:
  key = alphaword[0].upper()
  if key in alpha:
    alpha[key] +=1
  else:
    alpha[key] = 1
sortedalpha=sorted(alpha)
print("The occurence of words beginning with each letter is: ")
print(alpha)
print("")
print(sortedalpha)

这是不进行排序的输出 (alpha)

{'T': 14, 'S': 4, 'W': 4, 'F': 1, 'R': 2, 'O': 7, 'A': 2, 'L': 2, 'G': 1, 'C': 1, 'D': 2, 'H': 1, 'M': 1, 'P': 2}

这是我尝试对其进行排序时的输出(sortedalpha)

['A', 'C', 'D', 'F', 'G', 'H', 'L', 'M', 'O', 'P', 'R', 'S', 'T', 'W']

然而,我想要的是这个

['A': 2, 'C': 1, 'D': 2,'F': 1,'G': 1, 'H': 1, 'L': 2, 'M': 1, 'O': 7, 'P': 2, 'R': 2, 'S': 4, 'T': 14, 'W': 4]

python 列表 排序 频率分析

评论

3赞 Michael Butscher 8/30/2023
尝试sortedalpha=dict(sorted(alpha.items()))
0赞 blahblahblah 8/30/2023
效果很好!非常感谢!!
0赞 Andj 8/30/2023
一个有趣的问题,让我思考如何使代码适应英语以外的语言。我想你需要确定第一个字母是否是可索引的字母,如果不是,计算它应该分配给哪个索引字母。这不是你必须用英语迈出的一步。然后按语言对字典进行排序,但如果您使用的是 macOS,这将使排序过程复杂化。

答:

1赞 Epic-legend128 8/30/2023 #1

因此,当您在字典上调用 sort() 时,python 只会对字典的进行排序,就像它在代码中发生的情况一样。如果你想根据键对整个字典进行排序,但同时保留它们各自的值,那么你需要用Michael Butcher在你的评论中提到的方式来替换。这是有效的,因为 .items() 返回整个字典的只读可迭代对象,它允许您访问键和值。因此,您的代码应如下所示:sortedalpha = sorted(alpha)sortedalpha = dict(sorted(alpha.items()))

f = open('textfile.txt','r')
data=f.read()
words= data.split()
#Alphabet occurence
alpha ={}
for alphaword in words:
  key = alphaword[0].upper()
  if key in alpha:
    alpha[key] +=1
  else:
    alpha[key] = 1
sortedalpha=dict(sorted(alpha.items())) # here is the change
print("The occurence of words beginning with each letter is: ")
print(alpha)
print("")
print(sortedalpha)

如果你想访问一个字典的所有值的列表,而没有它们各自的键,那么你可以使用 .values(),对于键,你可以使用 .keys()。

评论

0赞 blahblahblah 8/30/2023
谢谢!这更有意义。我很欣赏你的解释!