仅计算字符串中字母的频率

时间:2018-03-29 13:46:56

标签: python string dictionary count key

我试图让我的程序计算除字符串中的数字之外的所有内容,并将其存储在字典中。

到目前为止,我有这个:

string = str(input("Enter a string: "))
stringUpper = string.upper()

dict = {}
for n in stringUpper:
    keys = dict.keys()
    if n in keys:
        dict[n] += 1
    else:
        dict[n] = 1
print(dict)

我只想量化字母数字,但我无法弄清楚如何排除非字母字符。

2 个答案:

答案 0 :(得分:1)

基本上涉及多个步骤:

  • 摆脱你不想计算的字符
  • 计算剩余的

您可以使用多种选项来执行这些操作。我只提出一个选项,但请记住,可能还有其他(和更好的)替代方案。

from collections import Counter

the_input = input('Enter something')
Counter(char for char in the_input.upper() if char.isalpha())

例如:

Enter something: aashkfze3f8237rhbjasdkvjuhb

Counter({'A': 3,
         'B': 2,
         'D': 1,
         'E': 1,
         'F': 2,
         'H': 3,
         'J': 2,
         'K': 2,
         'R': 1,
         'S': 2,
         'U': 1,
         'V': 1,
         'Z': 1})

所以它显然有效。在这里,我使用collections.Counter来计算和使用str.isalpha作为条件的生成器表达式来消除不需要的字符。

请注意,您的代码中存在一些不良习惯会使您的生活变得更加复杂:

  • dict = {}会影响内置dict。所以最好选择一个不同的名字。
  • string是内置模块的名称,因此这里的名称可能更好(但不是str,这也是内置名称。)
  • stringUpper = string.upper()。在Python中,你通常不使用camelCase,而是使用_分隔单词(即string_upper),但由于你只使用它来循环,你也可以直接使用for n in string.upper():
  • n等变量名称不是很有帮助。通常,在迭代字符串时可以将它们命名为charcharacter,或者在迭代“常规”迭代时为item命名。

答案 1 :(得分:0)

在迭代时,检查lower()upper()对于一个字符是否相同。如果它们彼此不同,则为字母。

if n.upper() == n.lower():
    continue

这应该做到。