gpt4 book ai didi

python - 使用 OrderedDictionary : TypeError issue 对 Anagrams 进行分组

转载 作者:行者123 更新时间:2023-11-28 22:41:08 26 4
gpt4 key购买 nike

我被指派按照词典编排的方式将字谜组合在一起。

下面是其中一个测试用例:

输入:吃茶 tan ate nat bat

输出:

吃喝茶
bat
自然光

但是,我不断收到这样的类型错误:TypeError: 'type' object is not iterable

我设法通过将 anagramDict = OrderedDict(list) 更改为 anagramDict = defaultdict(list) 来修复此错误,但这导致代码打印所有三行随机顺序每次运行程序。

有没有办法解决这个问题,使程序输出完全如上所示?

这是我到目前为止所做的:

import sys
from collections import *
def findAnagrams(string):
anagramDict = OrderedDict(list)
for word in string:
key = ''.join(sorted(word))
anagramDict[key].append(word)
return anagramDict

def main():
for string in sys.stdin:
stringList = string.split()
if len(stringList) == 0:
break
anagramDict = findAnagrams(stringList)
for key,anagrams in anagramDict.items():
if len(anagrams) >=1:
print(' '.join(sorted(anagrams)))
print ()
main()

注意:运行此程序的机器从标准输入/键盘读取输入并将输出打印到控制台(标准输出)。

最佳答案

你不能通过 OrderedDictlist 这样的论点。因为使用 OrderedDict 时它的参数应该是一个可迭代的(如元组列表等),将从中创建有序字典。

使用OrderedDict时,可以使用dict.setdefault()而不是获得类似的效果。示例 -

def findAnagrams(string):
anagramDict = OrderedDict()
for word in string:
key = ''.join(sorted(word))
anagramDict.setdefault(key, []).append(word)
return anagramDict

另外,要注意的另一件事是 OrderedDict 保持键发送给它的顺序,它不按字典顺序排序。

为此,一种简单的方法是在 main() 函数中尝试对其进行迭代时对其进行排序。示例 -

def main():
s = [input()]
for string in s:
stringList = string.split()
if len(stringList) == 0:
break
anagramDict = findAnagrams(stringList)
for key, anagrams in sorted(anagramDict.items() ,key=lambda x: sorted(x[1])):
if len(anagrams) >=1:
print(' '.join(sorted(anagrams)))
print ()

对于这个方法,你甚至不需要使用OrderedDict,你可以简单地使用一个defaultdict,或者一个带有dict的普通字典.setdefault .

演示 -

输入-

eat tea tan ate nat bat

输出-

ate eat tea
bat
nat tan

关于python - 使用 OrderedDictionary : TypeError issue 对 Anagrams 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32880712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com