我正在尝试做的是获取一个文本文件,并在文件中返回一个字谜词典(当按字母顺序重新排列时会产生新单词的单词)。因此,如果文件包含单词dub和bud,则代码应创建一个密钥bdu,并将字符串dub and bud附加到元组或列表或您拥有的字符串中。

现在,我的代码输出的正是我想要的,除了不是使用一个带有多个值的键,而是为每个值获取相同的键。回到前面的示例,我得到了bdu的密钥dub,然后是另一个bdu的bud密钥。如何删除相同的键并将键值合并到一个键?

def anagrams(f):
    '''takes a file and returns a list of anagrams in the file'''
    wordget = open(f).read().lower().split()
    dic = {}
    for w in wordget:
        if ("".join(sortword(w))) in wordget:
            dic = {("".join(sortword(w))):w}
            for key in dic.keys():
                print "'%s': %s" % (key, dic[key])
    return None


任何帮助,将不胜感激。我希望提出一种解决方案,即使包含数以万计的单词的文件(例如书籍)也能快速运行

最佳答案

集合包中Python的defaultdict类型对于这种情况很有用。

from collections import defaultdict
from pprint import pprint
answer = defaultdict(list)
for word in open(filename).read().lower().split():
    answer[''.join(sorted(word))].append(word)
pprint(answer)


defaultdict初始化接受一个用于初始化对象的函数。在这种情况下,我们初始化一个空列表,我们可以立即添加它。

您可能还会发现pprint模块很有用。它将很好地格式化您的单词列表。

10-06 09:36