合并附加到字典中的相似键的值

时间:2013-10-16 04:01:34

标签: python python-2.7 dictionary

我要做的是获取一个文本文件并返回字谜中的字典(在按字母顺序重新排列时生成一个新单词的单词)。因此,如果文件包含单词dub和bud,那么代码应该创建一个键bdu,并在元组或列表中将字符串dub和bud附加到它们或者你有什么。

现在我的代码输出正是我想要的,除了不是一个具有多个值的键,我得到每个值的相同键。为了回到我之前的例子,我获得了dub的关键字bdu,然后是另一个bdu关键字。如何删除相同的键并将键值合并到一个键?

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

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

2 个答案:

答案 0 :(得分:1)

集合包中的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模块很有用。它可以很好地格式化你的单词列表。

答案 1 :(得分:0)

dic = {("".join(sortword(w))):w}

每次都用新词典替换dic。您应该插入密钥或附加到列表

for w in wordget:
    key = ''.join(sorted(word))
    if key in dic:
        dic[key].append(word)
    else:
        dic[key] = [word]
 return dic

可以使用defaultdict对if / else块进行整理,如GrantJ的回答