创建一个 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 函数,该函数将为字符计数的元组创建一个字典,分配给元音、辅音或其他的键的主要内容,如果未能解决你的问题,请参考以下文章