Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何通过迭代找到文本文件中的字符频率?(蟒蛇3)_Python 3.x_List_Dictionary_For Loop_Keyerror - Fatal编程技术网

Python 3.x 如何通过迭代找到文本文件中的字符频率?(蟒蛇3)

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

我试图找到一种方法,通过迭代文本文件和列表来查找字符频率。我知道我可以使用Count()完成此操作。但是Count()提供了一切,包括空格、句点等等。此外,它不会按字母顺序显示字符频率。我找到了一种方法,它很有效,但不是真的。我稍后再解释。另外,当我尝试输入频率时,我会得到一个键错误。我也会解释

我不想把我的整个项目放在这里,所以我会先解释一些东西。我有一个单独的列表,叫做字母表,其中包括字母表。有一个文本文件已被通读并转换为大写,名为new_text

字符频率代码:

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的代码:

  • 我跳过了上面的问题,因为我找不到答案,也不想浪费时间,但遇到了另一个问题哈哈*
这个很简单,我得到了一个关键错误:“a”。 我试着只做那件事

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,'这就是我得到的结果。是的!工作得很好。非常感谢你!另外,我用绿色支票标记了你的答案,并且一定会回来投票!!!嗨,刚刚投票。如果不太麻烦的话,你能看看我刚刚发布的一个问题,或许能给我一些建议。这有点类似于这个问题。谢谢