我正在尝试做的是获取一个文本文件,并在文件中返回一个字谜词典(当按字母顺序重新排列时会产生新单词的单词)。因此,如果文件包含单词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模块很有用。它将很好地格式化您的单词列表。