创建一个 Python 函数,该函数将为字符计数的元组创建一个字典,分配给元音、辅音或其他的键

Posted

技术标签:

【中文标题】创建一个 Python 函数,该函数将为字符计数的元组创建一个字典,分配给元音、辅音或其他的键【英文标题】:Creating a Python function that will create a dictionary for tuples of character counts, assigned to a key of either vowels, consonants or others 【发布时间】:2021-12-16 12:54:45 【问题描述】:

因此,尝试创建一个接受字符串输入的函数,并使用该输入,将所有字符的所有实例计数到字典中(如'a':5, 'b':4 etc..,然后最终创建一个新字典,其中包含 3键:元音,辅音和其他,并添加字符元组:集合中的计数到正确的键。

例如:输入'brown fox'。 返回值应为:'Vowels':('o', 2), 'Consonants':('b', 1), ('r', 1), ('w', 1), ('n', 1), ('f', 1), ('x', 1), 'Other':' ', 1

目前我认为通过key的迭代看起来很简单,但是跑到了死胡同。

我的想法是使用函数 symbol_freq 将所有唯一字符排序到字典中,其中字符是键,值是计数。然后我会创建一个空字典,并开始遍历那里的所有键,查看它们是否在元音和辅音列表中,并将所述字符的元组分配给我的新字典中的正确键,其中包含 3 个键。

得到以下错误:

Traceback(最近一次调用最后一次): 文件“....py”,第 26 行,在 print(group("tao pihku ajuhälvik"))

文件“....py”,第 13 行,分组 对于 key,symbol_freq_dict 中的值: ValueError: 没有足够的值来解包(预期 2,得到 1)

def symbol_freq(string):
    symbol_freq_dict = dict.fromkeys(string, 0)
    for i in string:
        symbol_freq_dict[i] += 1
    return symbol_freq_dict

def group(string):
    vowels = ['a', 'e', 'i', 'o', 'u', 'õ', 'ä', 'ö', 'ü']
    consonants = ['b', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 'š', 'z', 'ž', 't', 'v']
    string.lower()
    symbol_freq_dict = symbol_freq(string)
    grouped_dict = dict()
    for key, value in symbol_freq_dict:
        if key in vowels:
            grouped_dict['Vowels'].append((key, value))
        if key in consonants:
            grouped_dict['Consonants'].append((key, value))
        else:
            grouped_dict['Other'].append((key, value))
            
    return grouped_dict

【问题讨论】:

您能告诉我们错误发生在哪一行吗?这样可以大大减少实际帮助您的工作量。 第 13 行,将编辑帖子 您应该发布完整的回溯,其中包含行号和上下文。 请注意,您应该将第二个if 更改为elif,否则所有元音也将被视为“其他” 这能回答你的问题吗? How to unpack key,value pairs in python? 【参考方案1】:

阅读有关 python 字典的更多信息。简而言之:

默认情况下,它们只会遍历键 他们没有附加方法。 (不做,你应该如何在字典的末尾添加一些东西?)

我把你的代码改成如下:

def group(string):
    vowels = ['a', 'e', 'i', 'o', 'u', 'õ', 'ä', 'ö', 'ü']
    consonants = ['b', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 'š', 'z', 'ž', 't', 'v']
    string.lower()
    symbol_freq_dict = symbol_freq(string)
    grouped_dict = 'Vowels': ,'Consonants': ,'Other': # intialized dictionaries
    for key, value in symbol_freq_dict.items(): # added items()
        if key in vowels:
            grouped_dict['Vowels'][key] = value # changed the append
        elif key in consonants:
            grouped_dict['Consonants'][key] = value # changed the append
        else:
            grouped_dict['Other'][key] = value # changed the append

    return grouped_dict

【讨论】:

谢谢,我今天才开始基本处理字典。将分析代码并从中学习,非常感谢。【参考方案2】:

首先,请阅读(并发布)完整的错误消息,尤其是关于错误所在行的部分。

我猜这是第二个 for 循环。解包意味着,你有一个元组并一次将它分配给两个变量:

a,b = (1,2) #-> a=1, b=2

你在 for 循环中这样做。

For 获取字典中的每个键并将其分配给左侧的变量。所以如果你写

for key, value ...

它尝试将dict的每个键分配给两个变量,这是行不通的,因为它只是一个错误。

因此,要解决此问题,请使用 symbol_freq_dict.enumerate(),它基本上会返回包含键和值的元组列表。

顺便说一句,下次谷歌你的错误信息。

【讨论】:

很明显,我用谷歌搜索过,但不太明白。将从中吸取教训,以使我的帖子在未来得到更好的理解。谢谢。

以上是关于创建一个 Python 函数,该函数将为字符计数的元组创建一个字典,分配给元音、辅音或其他的键的主要内容,如果未能解决你的问题,请参考以下文章

如何将C字符串中的计数器变量赋予函数

C ++:从函数、返回类型或引用中使用和返回字符数组?

LED将为我闪烁:控制发光二极管

LED 将为我闪烁: 控帘 j发光二级管

第七章LED将为我闪烁:控制发光二极管

python split函数