使用 python 中的字典计算变量中的字母数



我想编写代码,该代码将接受字母输入并返回输出,说明这些字母在变量中出现的次数。 这是我到目前为止所拥有的:

#Letter Count
def letter_count(letters):
number_counts = {'a':'1','b':'2','c':'3','d':'4','e':'5','f':'6','g':'7','h':'8','i':'9','j':'10','k':'11','l':'12','m':'13','n':'14','o':'15','p':'16','q':'17','r':'18','s':'19','t':'20','u':'21','v':'22','w':'23','x':'24','y':'25','z':'26'}
str_int = str(letters)
int_name = ''
for char in str_int:
int_name = int_name + number_counts[char] + ' '
return int_name.strip()

它不会返回类似 a : 1 或 u : 0 的内容,而是返回 1 或 21 以下是它应该做什么以及现在做什么的一些测试用例

#What it should do
letter_count(arthur)
{'a': 3, 'b': 2, 'c': 0, 'd': 3, 'e': 5, 'f': 2, 'g': 4, 'h': 0, 'i': 7, 'j': 0, 'k': 0, 'l': 1, 'm': 3, 'n': 9, 'o': 7, 'p': 1, 'q': 0, 'r': 5, 's': 10, 't': 5, 'u': 1, 'v': 1, 'w': 2, 'x': 0, 'y': 2, 'z': 0}
letter_count('')
{'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
#what it does now
letter_count(abc)
1 2 3
letter_count(hi)
8 9

我该如何解决这个问题?

您的代码目前只返回关联的数字(例如它在字母表中的位置(,每个字母都在number_counts中,而不是实际尝试计算任何内容。

相反,让我们创建一个空白的字母字典(例如,它们最初都是零(,并在给定的字符串中遇到该字母时为每个字母添加一个。

def letter_counter(your_string: str):
counter_dict = {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
for char in your_string.lower():  # I assume you wish to count lower and uppercase as the same
if char in counter_dict.keys():  # discards anything not in our dictionary
counter_dict[char] += 1
return counter_dict
test = "This is a test!"
print(letter_counter(test))

输出:

{'a': 1, 'b': 0, 'c': 0, 'd': 0, 'e': 1, 'f': 0, 'g': 0, 'h': 1, 'i': 2, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 3, 't': 3, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}

有了这个,您可以对其进行扩展以计算其他字符,例如!,否则它们会被忽略。如果您希望单独计算大写字母,则需要将所有大写字母分别添加到字典中,并从脚本中删除.lower()

不是对当前代码的直接修复,只是想将此选项留在这里,旨在解决您的函数目标。 它使用集合。计数器并将结果从 most_common(( 转换为字典

import string
import collections
alphabet_dict = dict.fromkeys(string.ascii_lowercase, 0) 
alphabet_dict.update(dict(collections.Counter(list('arthur')).most_common()))
>>> {'a': 1, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 1, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 2, 's': 0, 't': 1, 'u': 1, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}

计算单词中字母的出现

次数
myStr = 'linuxandunixrocks'
counter = {}
for char in myStr:
if char not in counter:
counter[char] = 1
else:
counter[char] = counter[char] + 1
print(counter)
"""
{'l': 1, 'i': 2, 'n': 3, 'u': 2, 'x': 2, 'a': 1, 'd': 1, 'r': 1, 'o': 1, 'c': 1, 'k': 1, 's': 1}
"""

返回一个输出,说明这些字母在变量中出现的次数

myStr = 'linuxandunixrocks'
checkStrs = 'liku'
counter = {}
for char in checkStrs:
if char in myStr:
counter[char] = myStr.count(char)

print(counter)
"""
{'l': 1, 'i': 2, 'k': 1, 'u': 2}
"""

使用 Collections lib 可以实现这一点

from collections import Counter
def letter_count(arthur):
return dict(Counter(arthur))
print(letter_count('arthur'))


输出:

output =  {'a': 1, 'r': 2, 't': 1, 'h': 1, 'u': 1}

最新更新