如何通过迭代从文本文件中找到字符频率? (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:
- 我跳过了上面的问题,因为我找不到答案,不想浪费我的时间,但是 运行 进入另一个问题 lol*
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}
我正在尝试找到一种遍历文本文件和列表以查找字符频率的方法。我知道我可以为此使用 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:
- 我跳过了上面的问题,因为我找不到答案,不想浪费我的时间,但是 运行 进入另一个问题 lol*
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}