程序在开始时获取输入。输入的字符串可以包含大写字母或任何其他 ASCII 字母。我们对它们没有区别,所以我们只使用 lower() 方法。此外,除了字母表中的字母(数字等)之外的任何字母都用作字符串之间的空格。函数应该分析输入,对其进行排序并对其进行计数。 输出:
{'idk': 2, 'idc': 1, 'idf': 1}
输入:
print(word_frequency("Idk, Idc, Idk, Idf"))
我尝试了这个,它正在对输入进行排序,但我找不到分隔字符串的方法。这就是我所做的:
def word_frequency(text):
f = {}
pendens = ""
for s in text:
if s.isalpha():
pendens += s
else:
pendens = pendens.lower()
if pendens != " ":
if f.get(pendens, -1) != -1:
f[pendens] += 1
else:
f[pendens] = 1
pendens = pendens.lower()
if pendens != " ":
if f.get(pendens, -1) != -1:
f[pendens] += 1
else:
f[pendens] = 1
return f
print(word_frequency("Idk, Idc, Idk, Idf"))
print(word_frequency("Idk,+Idc,Idk;;-;Idf"))
print(word_frequency("help me please"))
我正在努力提高编码水平,因此我们将不胜感激任何形式的帮助:)
最佳答案
最简单的解决方案是 regex和 Counter ,这是一种专门用于计算如下值出现次数的字典:
>>> import re
>>> from collections import Counter
>>> words = 'Idk, Idc, Idk, Idf'
>>> re.findall('[a-z]+', words.lower())
['idk', 'idc', 'idk', 'idf']
>>> Counter(re.findall('[a-z]+', words.lower()))
Counter({'idk': 2, 'idc': 1, 'idf': 1})
如果您无法使用 Counter,那么普通字典也可以使用。我们可以使用dict.get
处理字典中存在和不存在的单词:
def count_words(words):
counts = {}
for word in re.findall('[a-z]+', words.lower()):
counts[word] = counts.get(word, 0) + 1
return counts
结果:
>>> count_words('Idk, Idc, Idk, Idf')
{'idk': 2, 'idc': 1, 'idf': 1}
如果你不能使用正则表达式,那么问题会变得更复杂,但仍然可行。一个generator像下面这样会起作用:
def split_words(words):
word = ''
for c in words.lower():
if 97 <= ord(c) <= 122: # ord('a') thru ord('z')
word += c
elif word:
yield word
word = ''
if word:
yield word
def count_words(words):
counts = {}
for word in split_words(words):
counts[word] = counts.get(word, 0) + 1
return counts
结果:
>>> count_words('Idk, Idc, Idk, Idf')
{'idk': 2, 'idc': 1, 'idf': 1}
关于python - 对映射中的键进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74503013/