Python 3.x 如何通过迭代找到文本文件中的字符频率?(蟒蛇3)
我试图找到一种方法,通过迭代文本文件和列表来查找字符频率。我知道我可以使用Count()完成此操作。但是Count()提供了一切,包括空格、句点等等。此外,它不会按字母顺序显示字符频率。我找到了一种方法,它很有效,但不是真的。我稍后再解释。另外,当我尝试输入频率时,我会得到一个键错误。我也会解释 我不想把我的整个项目放在这里,所以我会先解释一些东西。我有一个单独的列表,叫做字母表,其中包括字母表。有一个文本文件已被通读并转换为大写,名为new_text 字符频率代码:Python 3.x 如何通过迭代找到文本文件中的字符频率?(蟒蛇3),python-3.x,list,dictionary,for-loop,keyerror,Python 3.x,List,Dictionary,For Loop,Keyerror,我试图找到一种方法,通过迭代文本文件和列表来查找字符频率。我知道我可以使用Count()完成此操作。但是Count()提供了一切,包括空格、句点等等。此外,它不会按字母顺序显示字符频率。我找到了一种方法,它很有效,但不是真的。我稍后再解释。另外,当我尝试输入频率时,我会得到一个键错误。我也会解释 我不想把我的整个项目放在这里,所以我会先解释一些东西。我有一个单独的列表,叫做字母表,其中包括字母表。有一个文本文件已被通读并转换为大写,名为new_text 字符频率代码: for i in rang
for i in range(len(alphabet_list)):
for c in new_text:
if c == alphabet_list[i]:
count += 1
else:
count = 0
print(alphbet_list[i] + " " + str(count)
i += 1
输出
A 0
A 0
.
.
.
A 1
A 0
.
.
.
B 0
.
.
.
B 1
B 2
B 0
.
.
.
Z 0
另外,str(count)暂时存在,因为我想看看它打印出来的样子,我需要将结果存储在字典中
我的输出是这样的,就像我说的那样,它可以工作,但不是真的。它将迭代,但它会遍历每个字母并打印出结果,而不会迭代整个文本文件,只打印最终结果。如果有另一个与之前相同的字母紧挨在一起,则会增加结果。Ex(…bb…)它将是b1,b2,如我的输出所示。由于某种原因,当我使用return时,它不起作用。它不返回任何内容,只是结束程序
第二个带有KeyError的代码:
- 我跳过了上面的问题,因为我找不到答案,也不想浪费时间,但遇到了另一个问题哈哈*
i = 3 #just random number to test
count = 50
c_freq[alphabet_list[i]] == count
print(c_freq)
它是有效的,所以我认为这个问题也和上面的问题有关(?也许)。无论如何,任何帮助都会很好。谢谢
很抱歉问了这么长的问题,但我确实需要帮助。这应该可以帮助您:
lst = ['A', 'Z', 'H', 'A', 'B', 'N', 'H', 'Y', '.' , ',','Z'] #Initial list. Note: The list also includes characters such as commas and full stops.
alpha_dict = {}
for ch in lst:
if ch.isalpha(): #Checks if the character is an alphabet
if ch in alpha_dict.keys():
alpha_dict[ch] += 1 #If key already exists, value is incremented by 1
else:
alpha_dict[ch] = 1 #If key does not exist, a new key is created with value 1
print(alpha_dict)
输出:
{'A': 2, 'Z': 2, 'H': 2, 'B': 1, 'N': 1, 'Y': 1}
{'A': 2, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}
{'A': 2, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}
由于希望输出按字母顺序排序,请将以下行添加到代码中:
key_list = list(alpha_dict.keys()) #Creates a list of all the keys in the dict
key_list.sort() #Sorts the list in alphabetical order
final_dict = {}
for key in key_list:
final_dict[key] = alpha_dict[key]
print(final_dict)
输出:
{'A': 2, 'Z': 2, 'H': 2, 'B': 1, 'N': 1, 'Y': 1}
{'A': 2, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}
{'A': 2, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}
因此,以下是最终代码:
lst = ['A', 'Z', 'H', 'A', 'B', 'N', 'H', 'Y', '.' , ',','Z']
alpha_dict = {}
for ch in lst:
if ch.isalpha():
if ch in alpha_dict.keys():
alpha_dict[ch] += 1
else:
alpha_dict[ch] = 1
key_list = list(alpha_dict.keys())
key_list.sort()
final_dict = {}
for key in key_list:
final_dict[key] = alpha_dict[key]
print(final_dict)
输出:
{'A': 2, 'Z': 2, 'H': 2, 'B': 1, 'N': 1, 'Y': 1}
{'A': 2, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}
{'A': 2, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}
对很有效,非常感谢。我试图更新你的答案,但它不允许我,因为我刚刚做了这个帐户,并有不到15个声誉。(我对编程和堆栈还不熟悉)但当我有15%的声誉时,我一定会回来投票支持你的答案。再次感谢你们!!!你是救命恩人!!!哟!来自我这边的一个谦虚的请求。你能接受我的答案作为最好的答案吗?您可以通过单击upvote按钮下方的绿色勾号来完成此操作。很高兴帮助你!很抱歉再次打扰您,但我用另一个文本文件再次尝试了该代码,它还读取带有口音的字母。有没有办法只读字母a-Z.{'a':202723,'Z':2388,'À':32,'Á':3059,'Ä':12,'Ä':6,'Æ':1,'Ä':7,'È':267,'Ë':1127,'Ê':23,'Ë':240,'Í':1979,'Î':3,'Í':39,'Ó':2765,'Ô':4,'Ô':35,'Ú':977,'Ü':58,'这就是我得到的结果。是的!工作得很好。非常感谢你!另外,我用绿色支票标记了你的答案,并且一定会回来投票!!!嗨,刚刚投票。如果不太麻烦的话,你能看看我刚刚发布的一个问题,或许能给我一些建议。这有点类似于这个问题。谢谢