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

如何编写Python函数来计算字母在字符串中出现的次数?,python,dictionary,for-loop,key,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:

下面的代码有两个问题

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个字典,而不是返回字符串中字母的数量

其次,我需要能够访问每个键,以确定与之关联的值是否为奇数,并返回与它们关联的奇数值的键


有人知道怎么做吗?

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

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

>>> 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)]

所有这些都是关于压痕的,但这里有一个解决方案

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
,则没有理由返回,或者您可以
仅返回
结果,然后
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))

您可以为此使用内置函数。要计算特定字符,只需执行
S.count('a')
。为了得到一本包含所有字符的字典,你可以这样做

S = "acbcbba"

my_dict = {k:S.count(k) for k in set(S)}

你在说什么?您只返回了一本词典。谢谢您的建议!有没有一种方法可以做一件非常类似的事情,但返回键、值对?我需要能够返回如何使字符串的每个字母出现偶数次,在这个例子中,我需要返回1减去1的b值。或者对于deeded,它需要是2,一个字母e和一个字母d?