【问题标题】:Merging values attached to like keys in dictionary合并附加到字典中类似键的值
【发布时间】:2013-10-16 04:01:34
【问题描述】:

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

现在我的代码输出的正是我想要的,除了一个键具有多个值,我为每个值获取相同的键。回到我之前的例子,我得到了一个用于配音的 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

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

【问题讨论】:

标签: python python-2.7 dictionary


【解决方案1】:

在 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 模块很有用。它会很好地格式化您的单词列表。

【讨论】:

  • 很高兴我能帮上忙,亚历克斯。欢迎来到 StackOverflow。 PS。记得点击答案左上角的绿色复选标记accept answers。这是社区的重要组成部分。
【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2022-07-05
    • 1970-01-01
    • 2021-12-31
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多