使用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吗?