python - 对映射中的键进行排序

标签 python list dictionary

程序在开始时获取输入。输入的字符串可以包含大写字母或任何其他 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"))  

我正在努力提高编码水平,因此我们将不胜感激任何形式的帮助:)

最佳答案

最简单的解决方案是 regexCounter ,这是一种专门用于计算如下值出现次数的字典:

>>> 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/

相关文章:

python - 在Python中使用math.sqrt(num)比num**0.5有什么优势

python - 使用 Matplotlib 创建相邻图

dictionary - 将值插入 map 时出现 panic /错误

Dart 中的 List.shuffle() ?

python - 将多维数组与 zip_longest 组合

Python根据预定义的映射递归地转换dict

ios - OpenGL ES 2.0 立方体贴图不显示纹理

python - 如何在已经包含文本的行上将字典写入 CSV 文件?

python - 获取 pytorch 数据集的子集

java - 将 ArrayList 的最后 3 个元素复制到 List<String> 中