如何通过迭代从文本文件中找到字符频率? (python3)

How do I find character frequency form text file through iteration? (python3)

我正在尝试找到一种遍历文本文件和列表以查找字符频率的方法。我知道我可以为此使用 Count() 。但是 Count() 给出了一切,包括空格、句号和诸如此类的东西。它也不按字母顺序显示字符频率。我找到了一种方法来做到这一点并且它有效但不是真的。我稍后会解释。此外,当我尝试输入频率时,我得到一个 KeyError。我也会解释的。

我不想把我的整个项目放在这里,所以我会先解释一些东西。我有一个名为 alphabet_list 的单独列表,其中包含字母表。有一个文本文件已被读取并转换为大写,名为 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

P.S str(count) 暂时在那里,因为我想看看打印出来的样子,我需要将结果存储在字典中

我的输出是这样的,就像我说的那样有效但不是真的。它会迭代,但它会迭代每个字母并打印出结果,而不是迭代整个文本文件而只打印最终结果。如果有另一个与之前相同的字母彼此相邻,它将添加到结果中。 Ex (... bb...) 它将是 B 1,B 2,如我的输出所示。由于某种原因,当我使用 return 时它不起作用。 return没什么,只是程序结束。

第二个代码出现 KeyError:

for i in range(len(alphabet_list)):
    for c in new_text:
        if c == alphabet_list[i]:
            count += 1
        else:
            count = 0
    c_freq[alphabet_list[i]] == count
    print(c_freq)        
    i += 1

这个非常简单我得到一个 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}

由于您希望输出按字母顺序排序,因此将这些行添加到您的代码中:

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, '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, 'B': 1, 'H': 2, 'N': 1, 'Y': 1, 'Z': 2}