0

我这里有一段代码可以检查一长串单词的字谜。我试图找出如何在我的长单词列表中搜索每个单词以找到可以匹配这个单词的其他字谜。有些单词在我的单词列表中应该有多个字谜,但我无法找到加入列表中的字谜的解决方案。


set(['biennials', 'fawn', 'unsupportable', 'jinrikishas', 'nunnery', 'deferment', 'surlinesss', 'sonja', 'bioko', 'devon'] ect...

因为我一直在使用集合,所以集合永远不会读到最后,它只返回最短的单词。我知道应该有更多。我一直在尝试在我的整个集合上迭代我的密钥,words这样我就可以找到所有与我的密钥有关的字谜。

anagrams_found = {'diss': 'sids', 'abels': 'basel', 'adens': 'sedna', 'clot': 'colt', 'bellow': 'bowell', 'cds': 'dcs', 'doss': 'sods', '
als': 'las', 'abes': 'base', 'fir': 'fri', 'blot': 'bolt', 'ads': 'das', 'elm': 'mel', 'hops': 'shop', 'achoo': 'ochoa'... and more}

我想知道我的代码在哪里被切断了。它应该从我的 Linux 词典中找到更多的字谜。谁能看到我的代码有什么问题?简单地说,首先程序遍历我拥有的每个单词,然后检查集合是否包含我的键。这会将键附加到我的字典中,以便以后也匹配我相同key的 . 如果已经有一个key我已经添加了一个字谜,我将通过将旧的字典值与一个新词(字谜)连接来更新我的字典

    anagram_list = dict()
    words = set(words)
    anagrams_found = []
    for word in words:
        key = "".join(sorted([w for w in word]))
        if (key in words) and (key != word):
            anagrams_found.append(word)
            for name, anagram in anagram_list.iteritems():
                if anagram_list[name] == key:
                    anagram = " ".join([anagram],anagram_found)
                    anagram_list.update({key:anagram})
            anagram_list[key] = word
    return anagram_list

总而言之,这个程序可能效率不高。有人可以解释我的代码的缺点吗?

4

1 回答 1

3
anagram_dict = {} # You could also use defaultdict(list) here
for w in words:
    key = "".join(sorted(w))
    if key in anagram_dict:
        anagram_dict[key].append(w)
    else:
        anagram_dict[key] = [w]

现在列表中只有一项的条目不是字谜所以

anagram_list = []
for v in anagram_dict.iteritems():
    if len(v) > 1:
        anagram_list += v
于 2013-10-08T03:36:04.187 回答