字母计数字典

4

我需要写一个名为LetterCount()的Python函数,它接受一个字符串作为参数,并返回一个字母计数的字典。然而,我的代码包括空格和逗号作为字典的一部分,这不是我想要的。 请问如何从我的列表中去掉空格?以下是我的代码:

import string
def LetterCount(str):
    str= str.lower().strip()
    str = str.strip(string.punctuation)
    list1=list(str)
    lcDict= {}
    for l in list1:
        if l in lcDict:
            lcDict[l] +=1
        else:
            lcDict[l]= 1
    print lcDict

LetterCount("Abracadabra, Monsignor")

6
看起来非常像这个问题 - Matt Ball
是的,在我发问之前我看过了那个,但我们在课堂上从未写过这段代码。所以我会用我知道的方法去做。 - Ivan
10个回答

6

统计字数,最好的方法是使用字典。

s = "string is an immutable object"
def letter_count(s):
    d = {}
    for i in s:
        d[i] = d.get(i,0)+1
    return d

输出:

{'a': 2, ' ': 4, 'c': 1, 'b': 2, 'e': 2, 'g': 1, 'i': 3, 'j': 1, 'm': 2, 'l': 1, 'o': 1, 'n': 2, 's': 2, 'r': 1, 'u': 1, 't': 3}

这是一个优雅的答案。 - Sun Bee

4

扩展Python - 字母计数字典

from collections import Counter

def LetterCount(text):
    return Counter(c for c in text.lower() if c.isalpha())

3
你可以检查 l 是否为字母字符 (if l.isalpha())。
示例:
   import string
    def LetterCount(str):
            str= str.lower().strip()
            str = str.strip(string.punctuation)
            list1=list(str)
            lcDict= {}
            for l in list1:
                    if l.isalpha():
                            if l in lcDict:
                                    lcDict[l] +=1
                            else:
                                    lcDict[l]= 1
            print lcDict

    LetterCount("Abracadabra, Monsignor")

3
你应该教他如何钓鱼! :) - Trufa
1
在这种问题中,如果你指向OP l.isalpha()应该就足够了,因为调查是学习过程的一部分...当然没有任何伤害,我也不怀疑你的意图是好的! - Trufa

1

另一个选项是使用filter()从字符串中删除所有非字母字符:

filter(str.isalpha, "Abracadabra, Monsignor")
'AbracadabraMonsignor'

在编写代码时要小心使用此方法——您将内置的str变量与同名变量重叠。永远不要将变量命名为str


1

在分配else分支中的计数之前,您应该检查l是否为字母。只有在它是字母时才分配计数。


我使用了 .isalpha() 方法来处理 l,它起作用了。不去想这个真是太傻了。谢谢,我是编程新手,有时候会忘记一些小细节。 - Ivan

1

来自Python文档(请注意前导和尾随方面):

string.strip(s [,chars])返回一个副本 去掉前导和尾随字符的字符串。如果省略或为None,则删除空格 字符。如果给定且不为None,则chars必须是一个字符串;该 字符串中的字符将从调用此方法的字符串的两端剥离。

在2.2.3版本中更改:添加了chars参数。 chars 参数不能在早期的2.2版本中传递。

你应该看一下str.replace()和DefaultDict :)


1
你应该使用 str.translate 而不是 str.strip

0
def count(string):

    return {i: string.count(i) for i in string}  

另一种方式


0

我不想替你做作业,因为我认为这样做对你没有帮助,但我会尝试指导你朝正确的方向前进,试试这个:

alphabet = map(chr, range(97, 123))

或者

alphabet2 = list(string.lowercase)

alphabetalphabet2将包含字母表中所有小写字母的列表。

感谢eumiro提醒!


0
这是我想出来的...
  string = 'hello'
  d = {}
  for letter in string:
      if letter not in d:
          d[letter] = 0
      d[letter] += 1
  return d

返回

{'h': 1, 'e': 1, 'l': 2, 'o': 1}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接