我如何编写一个Python函数来计算字符串中字母出现的次数?

时间:2020-08-20 12:35:45

标签: python dictionary for-loop key

以下代码有两个问题

S = "acbcbba"

def count_letters(text):
    result = {}
    for letter in text:
        if letter.isalpha():
            if letter.lower() in result.keys():
                result[letter.lower()] += 1
            else:
                result[letter.lower()] = 1
            print(result)
    return(result)

count_letters(S)

首先,我不知道如何修改它,因此它只返回1个字典,而不是与字符串中的字母一样多的字典。

第二,然后我需要能够访问每个键以弄清与其关联的值是否为奇数,并返回具有与之关联的奇数值的键?

有人对如何执行此操作有任何想法吗?

3 个答案:

答案 0 :(得分:2)

它不返回多个字典,它是返回 1个字典,而打印其他字典。只需删除您的print语句即可。

关于查询计数为奇数的项目,您可以使用字典的items()的列表理解,并按其值为奇数的值(即计数)进行过滤。

>>> d = count_letters(S)
>>> d
{'a': 2, 'c': 2, 'b': 3}
>>> [key for key, value in d.items() if value % 2 == 1]
['b']

如果要列出键值对,则可以执行类似的操作

>>> [(key, value) for key, value in d.items() if value % 2 ==1 ]
[('b', 3)]

答案 1 :(得分:1)

所有都是关于缩进,但这是一个解决方案

S = "acbcbba"

def count_letters(text):
    result = {}
    for letter in text:
        if letter.isalpha():
            if letter.lower() in result.keys():
                result[letter.lower()] += 1
            else:
                result[letter.lower()] = 1
    print(result)
    return(result)

count_letters(S)

输出

{'a': 2, 'c': 2, 'b': 3}

无论如何,如果函数中有print,或者您可以return仅返回结果,然后print则返回原因,则没有理由返回

S = "acbcbba"

def count_letters(text):
    result = {}
    for letter in text:
        if letter.isalpha():
            if letter.lower() in result.keys():
                result[letter.lower()] += 1
            else:
                result[letter.lower()] = 1
    return(result)

print(count_letters(S))

答案 2 :(得分:0)

您可以为此使用内置功能。要计算特定字符,只需执行mimap。要获得包含所有字符的字典,您可以执行类似的操作

S.count('a')