合并附加到字典中like键的值

2024-09-29 21:45:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

现在,我的代码输出的正是我想要的,只是不是一个键有多个值,而是每个值都有相同的键。回到上一个例子,我得到dub的键bdu,然后是bud的另一个键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

任何帮助都将不胜感激。我希望能找到一个运行速度也很快的解决方案,即使是包含上万个单词的文件(如书籍)


Tags: 文件key代码infor单词dubfile
2条回答

这个

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的答案所示

collections包中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模块很有用。它会很好地格式化你的单词列表。你知道吗

相关问题 更多 >

    热门问题