使用python:从字典中查找所有字谜,并按降序打印

使用python:从字典中查找所有字谜,并按降序打印,python,anagram,Python,Anagram,嗨,这是我的第一篇帖子。我已经创建了我的程序,以便它以递减的大小打印所有的字谜。然而,它也打印了所有没有字谜的剩余单词,我不希望它这样做。我还想知道是否有更有效的方法,因为我的方法似乎比较迂回。请帮忙 import time start_time = time.time() def wordIterator(dictionaryFilename): with open(dictionaryFilename,'r') as f: for line in f:

嗨,这是我的第一篇帖子。我已经创建了我的程序,以便它以递减的大小打印所有的字谜。然而,它也打印了所有没有字谜的剩余单词,我不希望它这样做。我还想知道是否有更有效的方法,因为我的方法似乎比较迂回。请帮忙

import time

start_time = time.time()

def wordIterator(dictionaryFilename):
    with open(dictionaryFilename,'r') as f:
        for line in f:
            word = line.strip()
            yield word

def largestAnagram(words):
    import collections
    d = collections.defaultdict(list)
    for word in words:
        sortedWord = str(sorted(word))
        d[ hash(sortedWord) ].append(word)
    maxKey = max( d.keys(), key = lambda k : len(d[k]) )
    while (maxKey != 0):
        maxKey = max( d.keys(), key = lambda k : len(d[k]) )
        print(d[maxKey])
        del d[maxKey]


    return d[maxKey]

ter = wordIterator( 'dictionary.txt' )

print largestAnagram(ter)

end_time = time.time()
print("Elapsed time was %g seconds" %(end_time-start_time))

我想你想要
而(maxKey>1)

但是你的算法有不必要的二次复杂度,一个更有效的算法 解决办法是:

# ...
keys = [(len(v), k) for k, v in d.items() if len(v) > 1]
keys.sort(reverse=True)
for _, k in keys:
    print(d[k])

你能给我们看几行dictionary.txt吗?